jsf spring security用户信息

时间:2011-12-15 00:18:44

标签: jsf authentication spring-security

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

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

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

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

  3. “登录链接”只是对登录页面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" />
    
  4. 非常感谢您的进步。

1 个答案:

答案 0 :(得分:1)

  1. 对象身份验证是谁保存此属性,您可以使用managedBean中的下一行获取:

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

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

    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();
    }
    
  3. 好问题,我不确定,但我想我记得已经读过它必须是POST,尝试会很有趣。我使用 h:outputLink

  4. 亲切的问候。