java - Jboss 身份验证问题

标签 java servlets jboss jboss7.x servlet-filters

我必须执行一些应该在 session 经过身份验证后完成的操作。现在我正在使用过滤器,在过滤器内我正在检查 session 是否包含用户主体,如果是,我正在执行该操作。但问题是,身份验证后的每个操作都会被调用,这会导致一些问题。有什么方法可以只执行一次吗?

最佳答案

您可以使用 custom login module 。看LoginModule developers guide了解详情。

将您的操作放入登录模块的 commit() 方法中。将新的登录模块添加到应用程序使用的安全域中使用的登录模块链中。

已更新

示例登录模块(可以是 WAR 部署的一部分):

package org.jboss.test;

import java.util.Map;

import javax.security.auth.Subject;
import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.login.LoginException;
import javax.security.auth.spi.LoginModule;

public class EmptyLoginModule implements LoginModule {

  public void initialize(Subject subject, CallbackHandler callbackHandler, Map<String, ?> sharedState,
      Map<String, ?> options) {
  }

  public boolean login() throws LoginException {
    return true;
  }

  public boolean commit() throws LoginException {
    System.out.println("Authenticated");
    return true;
  }

  public boolean abort() throws LoginException {
    return true;
  }

  public boolean logout() throws LoginException {
    return true;
  }

}

安全域配置示例:

<security-domain name="web-tests" cache-type="default">
    <authentication>
        <login-module code="UsersRoles" flag="required"/>
        <login-module code="org.jboss.test.EmptyLoginModule" flag="required"/>
    </authentication>
</security-domain>

关于java - Jboss 身份验证问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32207337/

相关文章:

Java 64位安装不起作用;只有32位可以吗?

java - Tomcat工作时超时

java - CDI 注入(inject)和 JPA EntityManager

Java 尽管存在,但使用 JBOSS 时未找到

应用服务器中的 JSF 2 问题?

Java检测图像中的旋转

java - 如何将 REST 请求转发到另一个资源?

java - 如何通过Java中的收据打印机打印支票?

java - Tomcat webapps 服务器独立吗?

jsp - 将对象从 JSP 页面传递回 Servlet