获取 tomcat 领域中的会话属性



我正在用 J2E 开发一个带有 struts 2 和 tomcat v6 的应用程序。

我的应用程序中有一个登录页面,用户必须通过单击虚拟键盘(我自己制作)来输入密码。

在键盘出现之前,我有一个操作来随机化字符的.出于安全原因,此操作还会对所有字符进行编码,并在会话中设置字符和代码的映射。

身份验证是通过 tomcat 中的 JDBC 领域完成的。

我正在尝试做的是解码用户的密码。我尝试了带有 url 模式"j_security_check"的过滤器,但我发现无法在过滤器中捕获此事件。

所以我正在尝试在 JDBC 领域解码密码,但它不起作用。我尝试在领域中使用 ServletActionContext.getRequest(),但我面临空指针异常。

是否可以将地图存储在域中的会话中?如果不是,欢迎提供有关如何执行此操作的任何线索,因为我还没有找到任何解决方案。

一个可能的解决方案是编写自定义身份验证器,扩展 FormAuthenticator

例如。

//Will expand the basic FORM authentication to include auth based on request headers
public class CustomAuthenticator extends FormAuthenticator{
    public boolean authenticate(Request request, Response response, LoginConfig config) throws IOException{
        if(request.getUserPrincipal() == null){
            Realm realm = context.getRealm();
            //Pick the user name and password from the request headers
            //you can decode the password here
            if(username == null || pass ==null) return super.authenticate(....);
            boolean authenticated = realm.authenticate(username, pass);
            if(authenticated == false) return false;
            //Set the username/password on the session and set  the principal in request
            session.setNote(Constants.SESS_USERNAME_NOTE, username);
            session.setNote(Constants.SESS_PASSWORD_NOTE, password);
            request.setUserPrincipal(principal);
            register(request, response, principal, Constants.FORM_METHOD, username, pass);
        }
        return true;
    }
}

另请参阅:http://apachecon.com/eu2007/materials/UnderstandingTomcatSecurity.pdf 和 http://javaevangelist.blogspot.com/2012/12/tomcat-7-custom-valve.html

相关内容

  • 没有找到相关文章

最新更新