Обычная аутентификация на войне, содержащая ejb jar с аннотацией @Webservice

Я использую сервер приложений JoNAS 5.3.

Я упаковал войну, в которой есть ejb-jar. В ejb jar содержится класс, аннотированный @Webservice.

Когда я открываю ссылку http://localhost/file/html/index.html, открывается окно для проверки подлинности, и я могу выполнить проверку подлинности без проблем.

Но когда я открыл ссылку http://localhost/file/test?wsdl, wsdl открывается напрямую без всплывающего окна аутентификации. Даже после закрытия и повторного открытия браузера он не работает.

Как заставить всплывающее окно аутентификации работать как с файлами в war, так и сгенерированным wsdl с аннотацией @Webservice?

Я даже попробовал войну на Glassfish 4, происходит то же самое. Аутентификация отображается только для html-файла, но не для созданного @Webservice wsdl.

Вот файлы в войне:

file.war
--- WEB-INF
       --- lib/ejb.jar
       --- web.xml
--- html
       --- index.html

вот содержимое моего web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 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_2_5.xsd">

<security-constraint>
   <web-resource-collection>
      <web-resource-name>Webservices</web-resource-name>
      <url-pattern>/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
      <role-name>admin</role-name>
    </auth-constraint>
 </security-constraint>
 <login-config>
       <auth-method>BASIC</auth-method>
     <realm-name>realm_admin</realm-name>
 </login-config>
 <security-role>
     <role-name>admin</role-name>
</security-role>

</web-app>

И вот код для класса в моем ejb-jar:

package com.mamoo.test.ws;


import java.rmi.RemoteException;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.annotation.PostConstruct;
import javax.annotation.security.RolesAllowed;
import javax.ejb.Stateless;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
import javax.jws.HandlerChain;
import javax.jws.WebParam;
import javax.jws.WebService;
import javax.xml.ws.soap.Addressing;

@Stateless
@TransactionAttribute(TransactionAttributeType.SUPPORTS)
@WebService(name="test", serviceName="test")
@RolesAllowed({"admin"})
public class Test 
{
    private static Logger logger = Logger.getLogger("com.mamoo.test.ws");;

    /**
     * EJB SessionContext
     */
    @PostConstruct
    public void init()
    {

    }


    public void testing(@WebParam(name="id") int id) 
    {
        logger.log(Level.INFO, "testing invocation");       
    }

}

0 ответов

Другие вопросы по тегам