Ich benutze Resteasy 3.0.11.Final mit JBoss AS 5.1.0 GA. Ich habe einen definierten REST-Webservice. Der gesamte Dienst ist mit einer BASIC-Authentifizierung mit einer benutzerdefinierten Sicherheitsdomäne gesichert. Wenn ich Postman verwende, um eine Anfrage (# 1) mit BASIC-Authentifizierung für Benutzer A zu senden, ruft JBoss AS ein Login-Modul für den Benutzer auf und ruft dann eine lokale EJB-Methode (mit Anfangskontext gesucht) mit dem Aufrufer Principal A auf. Unmittelbar nachdem ich eine andere Anfrage (# 2) mit BASIC-Authentifizierung für den Benutzer B gesendet habe, ruft JBoss AS in diesem Fall kein Login-Modul mehr auf und ruft erneut eine lokale ejb-Methode mit dem Aufrufer A auf. Nach einiger Zeit sendet das Senden einer Anfrage mit Benutzer B das gewünschte Ergebnis (lokaler Ejb-Methodenaufruf mit Anrufer-Principal B). Ich bin mir nicht sicher, was das Problem verursacht, die Konfiguration des Resteasy-Dienstes/Sitzungsbehandlung oder die Konfiguration der JBoss AS-Sicherheitsdomäne, die für Login-Module zuständig ist (Subjekt-Timeout? Fehlende Abmeldung nach dem Aufruf der Methode?)? Grundsätzlich möchte ich Resteasy so konfigurieren, dass eine neue Sitzung mit einem neuen Aufruf des Login-Moduls für den Aufruf der lokalen EJB-Methode für jede Ruheanforderung erzwungen wird.JBoss AS 5.1.0 GA Resteasy-Anwendung - erzwingen Sie Login für jede Anfrage
web.xml:
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>my-app</display-name>
<context-param>
<param-name>resteasy.providers</param-name>
<param-value>org.jboss.resteasy.plugins.providers.jackson.ResteasyJackson2Provider,com.mycompany.infrastructure.ExceptionMapper</param-value>
</context-param>
<context-param>
<param-name>resteasy.resources</param-name>
<param-value>com.mycompany.resource.Resource</param-value>
</context-param>
<listener>
<listener-class>org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap</listener-class>
</listener>
<servlet>
<servlet-name>my-app-resteasy-servlet</servlet-name>
<servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class>
<init-param>
<param-name>javax.ws.rs.core.Application</param-name>
<param-value>com.mycompany.application.Application</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>my-app-resteasy-servlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
<security-constraint>
<web-resource-collection>
<web-resource-name>my-app-resteasy-servlet</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>User</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>MyRealm</realm-name>
</login-config>
<security-role>
<role-name>User</role-name>
</security-role>
</web-app>
Jboss-web.xml
<jboss-web>
<context-root>/path</context-root>
<security-domain>java:/jaas/MyRealm</security-domain>
</jboss-web>
beans.xml
<beans
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
bean-discovery-mode="all">
</beans>
login-config.xml für mein
<application-policy name="MyRealm">
<authentication>
<login-module code="com.mycompany.security.UsernamePasswordLoginModuleImpl"
flag="required">
<module-option name="password-stacking">useFirstPass</module-option>
</login-module>
</authentication>
</application-policy>
Resource.java
@Path("/resource")
@Stateless
public class Resource {
@POST
@Path("/execute")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public ResponseDTO execute(RequestDTO dto) {
try {
// code
} catch (Exception exception) {
// handle
}
}
}