原理:
UserDetails userDetails = (UserDetails) SecurityContextHolder.getContext().getAuthentication() .getPrincipal();
如果想用上面的代码获得当前用户,必须在spring security过滤器执行中执行,否则在过滤链执行完时org.springframework.security.web.context.SecurityContextPersistenceFilter类会
调用SecurityContextHolder.clearContext();而把SecurityContextHolder清空,所以会得到null。 经过spring security认证后,
security会把一个SecurityContextImpl对象存储到session中,此对象中有当前用户的各种资料。
网上的情况:
1.关键就是要把filters="none" 变化为相应的权限如access="permitAll"(必须设置
原文:https://blog.csdn.net/softwarehe/article/details/7710707/
2.SecurityContextImpl securityContextImpl = (SecurityContextImpl) request.getSession().getAttribute("SPRING_SECURITY_CONTEXT");
3.删除
我的情况:
我给静态资源js配置了<security:http pattern="/js/**" security="none"/>
又给action加了@Namespace("/js/xjgzjs") 注解
所以在访问这个action时,没有经过spring security过滤器,SecurityContextHolder清空,所以会得到null。
把@Namespace("/js/xjgzjs")改为@Namespace("/ry/xjgzjs")即可。