2013-08-31 8 views
0

У меня есть веб-сервис jax-ws, и я использую базовую аутентификацию. Я покажу вам 2 фрагмента кода, которые важны в первую очередь в моей проблеме. Web метод сервисаБазовая аутентификация JAX-WS с использованием realm

@WebMethod(operationName = "createBook") 
public String createBook(@WebParam(name = "name") Book entity) 
{ 
    Logger LOG = Logger.getLogger(Bookservice.class.getName()); 
    LOG.log(Level.INFO, secure_ctx.getUserPrincipal().getName()); 

веб-службы клиента

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {           
    // TODO add your handling code here: 
    Soapservice ss = new Soapservice(); 
    Bookservice bs = ss.getBookservicePort(); 
    //com.sun.xml.ws.transport.http.client.HttpTransportPipe.dump=true; 
    //client.addFilter(new LoggingFilter()); 
    try 
    { 
     System.setProperty("javax.xml.bind.JAXBContext", "com.sun.xml.internal.bind.v2.ContextFactory"); 
     BindingProvider bind_provider = (BindingProvider) bs; 
     bind_provider .getRequestContext().put(BindingProvider.USERNAME_PROPERTY, "tom"); 
     bind_provider .getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, "jones"); 
     this.jTextField1.setText(bs.createBook(null)); 
    } catch (Exception e) 
    { 
     java.util.logging.Logger LOG = java.util.logging.Logger.getLogger(testframe.class.getName()); 
     LOG.log(Level.SEVERE, null, e); 
    } 

аутентификации не работает с правильными данными для входа или нет. Также журнал сервера иногда создает правильное имя, но когда он меняет имя пользователя, появляется «admin». Когда я вернусь к исходному имени пользователя, серверный журнал останется «admin». Я использовал этот механизм в службе отдыха с использованием трикотажа и без проблем.

Кто-нибудь знает, если это связано с отсутствием сопоставления адаптеров сервлетов в моем web.xml?

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> 
<session-config> 
    <session-timeout> 
     30 
    </session-timeout> 
</session-config> 
<security-constraint> 
    <display-name>Constraint1</display-name> 
    <web-resource-collection> 
     <web-resource-name>soapservice</web-resource-name> 
     <description/> 
     <url-pattern>/*</url-pattern> 
    </web-resource-collection> 
    <auth-constraint> 
     <description>Access to book services</description> 
     <role-name>administrator</role-name> 
     <role-name>developer</role-name> 
     <role-name>manager</role-name> 
    </auth-constraint> 
    <user-data-constraint> 
     <description/> 
     <transport-guarantee>CONFIDENTIAL</transport-guarantee> 
    </user-data-constraint> 
</security-constraint> 
<login-config> 
    <auth-method>BASIC</auth-method> 
    <realm-name>jdbcr</realm-name> 
</login-config> 
<security-role> 
    <description>Has complete priviligies on access to soap api</description> 
    <role-name>administrator</role-name> 
</security-role> 
<security-role> 
    <description>Develops applications using soap api, has certain priviligies</description> 
    <role-name>developer</role-name> 
</security-role> 
<security-role> 
    <description>Has access to users and their role priviligies</description> 
    <role-name>manager</role-name> 
</security-role> 
</web-app> 

Мое изменение выходных данных в журнале во время работы не имеет смысла. INFO: Дэвид INFO: Дэвид INFO: админ INFO: админ INFO: админ

Дэвид является правильным пользователем, я не знаю, где администратор пришел из ??

+0

Какой сервер приложений используется для развертывания? –

+0

@Paul Glassfish 3.1.2.2 – David031

ответ

0

У вас должно быть отображение сервлета в web.xml на основе используемого вами механизма веб-сервиса. Например, я использую Metro укладывает на кот и имеет следующий web.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> 
<listener> 
    <listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class> 
</listener> 
<servlet> 
    <servlet-name>CallNotificationService</servlet-name> 
    <servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>CallNotificationService</servlet-name> 
    <url-pattern>/CallNotificationService</url-pattern> 
</servlet-mapping> 
<session-config> 
    <session-timeout> 
     30 
    </session-timeout> 
</session-config> 
</web-app> 

Вы должны позволить контейнеру знать, кто обрабатывает входящий запрос. Однако это не решит проблему аутентификации. Вы уверены, что это проблема аутентификации, а не просто проблема конфигурации на сервере?

+0

Спасибо за ответ. Я добавил свой web.xml. Я попытался сделать то же самое с ejb-jar.xml, но это не сработает. Я думаю, что web.xml не работает для конечных точек службы. – David031

Смежные вопросы