作用:无论是否登入都放行,登录的话request就会携带用户信息,controller只要判断request是否携带user信息,则可以判断是否登录。
public class LoginIntercepetor implements HandlerInterceptor {
@Autowired
private TokenService tokenService;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//前处理,执行handler之前执行此方法
//返回true,放行 false,拦截
//1.从Cookie中取token
String json = CookieUtils.getCookieValue(request, "token", true);
//2.不存在未登入状态,直接放行
if(StringUtils.isBlank(json)){
return true;
}
//3.存在则从调用sso系统,根据token取用户信息
E3Result e3Result = tokenService.getUserByToken(json);
//4.没有取到用户信息,登录过期,直接放行
if(e3Result.getStatus() != 200){
return true;
}
//5.取到用户信息。登入状态
TbUser user = (TbUser) e3Result.getData();
//6.把用户信息放到request中,只需要在Controller中判断request中有没有包含user信息。放行
request.setAttribute("user",user);
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object o, ModelAndView modelAndView) throws Exception {
//handler执行之后,返回ModelAndView之前
}
@Override
public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
//完成返回,返回ModeleAndView之后
//可以在此处理异常la
}
}
springmvc.xml
<!--拦截器-->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="cn.e3mall.cart.interceptor.LoginIntercepetor"/>
</mvc:interceptor>
</mvc:interceptors>