jsf spring安全用户信息

Posted

技术标签:

【中文标题】jsf spring安全用户信息【英文标题】:jsf spring security user info 【发布时间】:2012-01-20 18:21:26 【问题描述】:

我是 Spring Security 的新手。我正在使用带有spring security 3的jsf2。三个问题:

    如何从会话管理的 bean 访问当前登录用户的用户信息(名称、密码、角色)?

    为了在视图中使用它,例如根据用户的角色渲染元素。

    我如何知道用户是否已登录?如果用户未登录,则为了在视图中显示“登录链接”,如果用户已登录,则显示“注销链接”。我必须在我的托管 bean 中使用 Spring Security 的哪个属性来存储它信息并在视图中使用它?

    “登录链接”只是对登录页面 URL 的 GET 请求。但是我怎样才能显示“注销链接”?是否必须是 POST 请求并像这样使用“h:commandLink”?:

    <h:commandLink value="Logout" action="#request.contextPath/j_spring_security_logout" />
    

    或者可以是 GET 请求吗?:

    <h:link value="Logout" outcome="#request.contextPath/j_spring_security_logout" />
    

非常感谢您。

【问题讨论】:

也许这可以提供一些帮助 - static.springsource.org/spring-security/site/docs/3.0.x/… 【参考方案1】:

    对象认证是谁保存这个属性,你可以在你的 managedBean 的下一行获得:

    Authentication auth = SecurityContextHolder.getContext().getAuthentication();

    如果用户的身份验证不是AnonymousAuthenticationToken 的实例,则用户会被记录,在您的spring-security-context.xml 中,您必须定义Spring 拦截的url。

    第一个拦截器没有被 Spring 分析。在这种情况下,Authentication 对象是 AnonymousAuthenticationToken 的一个实例。

    第二个拦截器被Spring解析,用户被重定向到spring-security-context.xml声明的登录页面

    /* This is a example for to obtain the rol name for example for generate automatic menu */
    Authentication auth = SecurityContextHolder.getContext().getAuthentication();
    String namePrincipalRol = null;
    if (auth instanceof AnonymousAuthenticationToken) 
        namePrincipalRol = "ROLE_ANONYMOUS";
     else 
        namePrincipalRol = auth.getAuthorities().iterator().next().getAuthority();
    
    

    好问题,我不确定,但我想我记得读过它必须是 POST,尝试一下会很有趣。我使用 h:outputLink

亲切的问候。

【讨论】:

非常感谢@Rafael 的回答。我忘记了这个问题,因为我很久以前就问过了。我通过自己阅读有关框架和测试的内容解决了这个问题。最后在问题(3)中,我还使用了 h:outputLink (使用 href 呈现 html 链接 ),它是 GET 请求,而不是帖子。谢谢。 不客气,感谢您提供的信息。虽然问题很老,但答案可能对未来有所帮助。

以上是关于jsf spring安全用户信息的主要内容,如果未能解决你的问题,请参考以下文章

jsf spring安全访问被拒绝认证登录

具有 Spring 安全性的 JSF - 登录后重定向到指定页面

通过 JSF 表单成功登录后 Spring Security 不会重定向到登录页面

Spring 安全客户端详细信息将作为 DaoAuthenticationProvider 中的用户详细信息

SPRING:向Spring安全用户添加自定义用户详细信息

会话创建和会话销毁事件中的 Spring 安全访问用户详细信息