Обычная аутентификация на войне, содержащая 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");
}
}