ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-10-30 15:02:46  阅读:246  来源: 互联网

标签:jaas tomcat7 websphere servlet-filters java


我们有一项任务是在已通过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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有