任务:老系统servlet到Spring MVC框架的改造
遇到的问题:
1.Spring的security机制控制提示403
问题解析:
错误现象描述:
登录系统后访问子菜单(以子菜单为例改造)提示403,但是从断点debug来看,请求URL正确拿到。
排查思路:
排除法:
1、.do请求经由dispatch分发,spring Security拦截检查.do请求。
2、采用dispatch分发以其他后缀结尾的请求,可以完成分发,故可以定位问题在于spring security模块;
3、
排查applicationContext-security.xml
过程:
1.在applicationContext-security.xml查找URL权限过滤器
org.springframework.security.web.access.intercept.FilterSecurityInterceptor
2. FilterSecurityInterceptor extends AbstractSecurityInterceptor
Debug
Authentication authenticated = authenticateIfRequired();
发现authenticated 之中提示Not granted any authorities
3.进入authenticateIfRequired()查看发现该方法中调用
Authentication authentication =SecurityContextHolder.getContext().getAuthentication();
发现authenticated 之中提示Not granted any authorities
4.分析在哪赋予authentication 的值?
5.发现登录的时候有涉及到这个值得处理
UserDetails user = (UserDetails) SecurityContextHolder.getContext()
.getAuthentication()
.getPrincipal();
ShUser operateUser = (ShUser) this.getPrincipal();
6.进入ShUser.java(implements Serializable ,UserDetails)查看
7.发现对authentication 的处理为null
public Collection