Java JAAS注销不适用于自定义登录模块
在运行在WildFly 9服务器上的Java EE应用程序中,我有一个自定义登录模块:Java JAAS注销不适用于自定义登录模块,java,jakarta-ee,jaas,wildfly-9,undertow,Java,Jakarta Ee,Jaas,Wildfly 9,Undertow,在运行在WildFly 9服务器上的Java EE应用程序中,我有一个自定义登录模块: public class MyLoginModule extends AbstractServerLoginModule { private Principal identity; @Override public boolean login() throws LoginException { // do something identity = n
public class MyLoginModule extends AbstractServerLoginModule {
private Principal identity;
@Override
public boolean login() throws LoginException {
// do something
identity = new SimplePrincipal("test");
subject.getPrincipals().add(identity);
// do something else
return true;
}
@Override
public boolean logout() throws LoginException {
subject.getPrincipals().remove(identity);
return true;
}
}
login
方法按预期工作。但这与注销
方法不同。当我编写类似于request.getSession(false).invalidate()的东西时
从Servlet
或web服务,无法访问注销方法
这里是我的配置文件:
web.xml
客户区
有限资源
/*
*
*
我的授权
jboss-web.xml
java:/jaas/MySecurityDomain
standalone.xml
ServletExtension
class:
public class MyServletExtension implements ServletExtension {
@Override
public void handleDeployment(final DeploymentInfo deploymentInfo, ServletContext servletContext) {
deploymentInfo.addAuthenticationMechanism("MY-AUTH", new AuthenticationMechanismFactory() {
@Override
public AuthenticationMechanism create(String mechanismName, FormParserFactory formParserFactory, Map<String, String> properties) {
return new MyAuthenticationMechanism();
}
});
}
}
public class MyAuthenticationMechanism implements AuthenticationMechanism {
@Override
public AuthenticationMechanismOutcome authenticate(HttpServerExchange exchange, SecurityContext securityContext) {
PasswordCredential credential = new PasswordCredential(new char[] {});
Account account = identityManager.verify("test", credential);
if (account != null) {
return AUTHENTICATED;
} else {
return NOT_AUTHENTICATED;
}
}
}
我错过了什么吗?允许访问MyLoginModule.logout()
的方法是request.logout()
。我应该自己找到的 允许访问MyLoginModule.logout()
的方法是request.logout()
。我应该自己找到的 @Loc你是说request.getSession(false).invalidate()
不是调用logout
方法的方法吗?在这种情况下,有些事情我还不明白。也许你可以启发我。可能与问题没有直接关系+我可能错了(我很长时间没有使用JAAS),但在登录模块中保持会话特定状态,即主体标识
,是否正确?@Loc这里有一个示例,其中有人说请求.getSession(false).invalidate()
是注销方法的触发器:。这不是我找到的唯一一个例子@NikosParaskevopoulos问得好。我想是的,但也许我错了。我稍后再查。@cheb1k4:对不起,我错了。我只是检查一下Tomcat的源代码。将调用logou。当您调用request.logout()
时会发生什么情况?请注意,HttpSession.invalidate()和安全机制之间没有规范强制的关系。@你是说请求.getSession(false).invalidate()
不是调用注销方法的方法吗?在这种情况下,有些事情我还不明白。也许你可以启发我。可能与问题没有直接关系+我可能错了(我很长时间没有使用JAAS),但在登录模块中保持会话特定状态,即主体标识
,是否正确?@Loc这里有一个示例,其中有人说请求.getSession(false).invalidate()
是注销方法的触发器:。这不是我找到的唯一一个例子@NikosParaskevopoulos问得好。我想是的,但也许我错了。我稍后再查。@cheb1k4:对不起,我错了。我只是检查一下Tomcat的源代码。将调用logou。当您调用request.logout()
时会发生什么情况?请注意,HttpSession.invalidate()和安全机制之间没有规范强制的关系。