java - 多种java servlet认证方式

标签 java

Java servlet 是否可以有多种身份验证方法?例如,除了 open id 之外,还有基于表单的身份验证基于身份验证,因此用户可以选择他们的登录方式。

最佳答案

是的。

但是,我建议使用 servlet 过滤器而不是 servlet 本身来执行此操作。

http://brendangraetz.wordpress.com/2010/06/17/use-servlet-filters-for-user-authentication/

按照该帖子中的步骤操作,并覆盖 isAuth() 方法,以便它以您希望的多种模式执行身份验证。在(非常粗糙,未经测试的)代码中:

@Override protected boolean isAuth()
{
    String authMode = (String)(getSession(true).getAttribute("authMode"));
    if (authMode == null) { return false; }
    if (authMode.equals("open id") {
        //do open id authentication steps here
        //return true if authentication passes
    }
    else if (authMode.equals("some other authentication") {
        //do some other authentication steps here
        //return true if authentication passes
    }
    ...
    return false;    
}

我当然假设您已经知道如何在每种模式下分别实现身份验证步骤。

“技巧”是在 HTTP session 中存储一个值,在用户执行登录身份验证后,立即在 HTTP session 中。基于此值,过滤器将知道在加载 servlet 之前它应该检查或查询您指定的任何内容。

关于java - 多种java servlet认证方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3066911/

相关文章:

java - 在 Java 中构建机器人

java - java逻辑中的三重嵌套for循环

java - 在 Tomcat 和 Websphere 上部署时有什么区别?

java - 如何将 byte[4] 转换为 int (Android)

java - 如何在eclipse中使用java中的if(DEBUG)?

javascript - Thymeleaf 在 Google Analytics 代码上抛出错误

java - 试图理解接受的答案 - Thread Safe Map of Queues

java - 在 Spring 中使用@Cacheable 和@CacheEvict

java - Netty websocket的MyServerHandler中要写什么

Java 序列化 - 不兼容的 serialVersionUID