整合Spring Security3,在JSP中获取当前登陆用户信息

整合Spring Security3,在JSP中获取当前登陆用户信息  2013-02-20 20:31:32|  分类: Spring |  标签: |举报 |字号大

小 订阅
最近在学习Spring Security3,遇到了很多问题。唉,有点乱,不过我还是努力整理了一下。O(∩_∩)O~

开始说正文。

我是想在JSP中判断用户是否登陆,以及取到用户名,网上搜索了一下,也找到了几种方法,但不是我想要的。

之前搜索到的几种方法:

一种是使用标签库:

在JSP中先加入





<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %>  




然后使用





<sec:authentication property="name"/>   




就可以取到当前登陆的用户名了。再一种是在Java中的代码:





Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();      

if (principal instanceof UserDetails) {      

    System.out.println("用户名:" + (UserDetails) principal).getUsername();      

}   




以上两种方法都可以取到当前登录的用户名。但是我想在JSP中判断取到当前登陆用户的用户名。所以我想把Java中的代码挪到JSP中使用,这时候就遇到问题了。总是抛NullPointerException。

搜索了一下,找到是SecurityContextHolder总是为空。原因是要使用Java的那段代码,必须要在Spring Security过滤器执行中执行,否则在该过滤器执行完之后,org.springframework.security.web.context.SecurityContextPersistenceFilter类会调用SecurityContextHolder.clearContext(),这样SecurityContextHolder就被清空了,所以在JSP中的SecurityContextHolder会返回NULL。

解决方法:

在经过Spring Security认证之后,Security会把一个SecurityContextImpl对象存储到session中,这个对象中存有当前用户的信息。





SecurityContextImpl securityContextImpl = (SecurityContextImpl) request.getSession().getAttribute("SPRING_SECURITY_CONTEXT");   

//登录名        

System.out.println("Username:" + securityContextImpl.getAuthentication().getName());        

//登录密码,未加密的        

System.out.println("Credentials:" + securityContextImpl.getAuthentication().getCredentials());   

         

WebAuthenticationDetails details = (WebAuthenticationDetails)securityContextImpl.getAuthentication().getDetails();   

         

//获得访问地址        

System.out.println("RemoteAddress" + details.getRemoteAddress());        

//获得sessionid   

System.out.println("SessionId" + details.getSessionId());        

//获得当前用户所拥有的权限   

List<GrantedAuthority> authorities = (List<GrantedAuthority>)securityContextImpl.getAuthentication().getAuthorities();   

for (GrantedAuthority grantedAuthority : authorities) {   

    System.out.println(“Authority” + grantedAuthority.getAuthority());   

}  




涨知识了,呵呵~~~
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值