我是Spring Security的新手。我正在使用jsf2和spring security 3.三个问题:
如何从会话管理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" />
非常感谢您的进步。
答案 0 :(得分:1)
对象身份验证是谁保存此属性,您可以使用managedBean中的下一行获取:
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
如果用户的身份验证不是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();
}
好问题,我不确定,但我想我记得已经读过它必须是POST,尝试会很有趣。我使用 h:outputLink
亲切的问候。