编程语言
首页 > 编程语言> > java-如何在Tomcat的Jaas登录模块中访问HttpServletRequest

java-如何在Tomcat的Jaas登录模块中访问HttpServletRequest

作者:互联网

我们有一项任务是在已通过Websphere认证并正在运行的Tomcat7中认证我们的应用程序.

我们在Websphere中的应用程序具有JAAS定制登录模块,它通过回调处理程序访问HttpServletRequest对象,如下所示,并且我们在会话对象中设置了与用户相关的信息(可从请求中检索).

javax.security.auth.callback.Callback callbacks[] = new javax.security.auth.callback.Callback[3];
callbacks[0] = new javax.security.auth.callback.NameCallback(
            "Username: ");
callbacks[1] = new javax.security.auth.callback.PasswordCallback(
            "Password: ", false);
callbacks[2] = new com.ibm.wsspi.security.auth.callback.WSServletRequestCallback(
            "HttpServletRequest: ");

如您所见,这里的问题是上面的代码特定于Websphere.因此,我们要编写另一个特定于Tomcat的自定义登录模块.对不起,这是别人设计的.

现在的问题是如何在Tomcat的Jaas登录模块中访问HttpServletRequest / HttpSession对象?

注意:我尝试使用ThreadLocal来传递用户信息,而不是HttpServeletRequest,但似乎不建议这样做,因为线程是从Tomcat中的线程池中重用的,以防万一有潜在的问题(内存泄漏,用户信息共享等)如果我们没有正确清除ThreadLocal.

解决方法:

在Jboss中,可以通过以下方式实现:

HttpServletRequest  request = (HttpServletRequest) PolicyContext
                        .getContext("javax.servlet.http.HttpServletRequest");

但是PolicyContext在JACC中,而Tomcat尚不支持JACC. Tomcat 9可能支持它,但是Tomcat的优先级较低.

标签:jaas,tomcat7,websphere,servlet-filters,java
来源: https://codeday.me/bug/20191030/1968731.html