Spring mvc中自定义拦截器
一、要实现的一个功能:
1、打开特定的一些页面时必需强制用户进行登录。
2、登录后再返回到之前的页面。
二、先写一个service,实现从cookie中判断用户是否登录。
1、TT_TOKEN为登录成功时,响应给浏览器的Cookie的键。
@Service public class UserServiceImpl implements UserService{ @Value("${SSO_BASE_URL}") private String SSO_BASE_URL; @Value("${SSO_USER_INFO}") private String SSO_USER_INFO; @Override public TbUser getCookieByToken(HttpServletRequest request, HttpServletResponse response) { try{ String token = CookieUtils.getCookieValue(request, "TT_TOKEN"); if (StringUtils.isBlank(token)) { return null; } //cookie中如果取到值,调用sso服务从cookie取到用户信息 String json = HttpClientUtil.doGet(SSO_BASE_URL + SSO_USER_INFO + token); TaotaoResult result = TaotaoResult.format(json); if (result.getStatus() != 200) { return null; } result = TaotaoResult.formatToPojo(json, TbUser.class); TbUser user = (TbUser) result.getData(); return user; }catch (Exception e) { e.printStackTrace(); return null; } } }
二、拦截器代码如下
1、定义一个拦截器LoginInterceptor实现spring mvc的接口HandlerInterceptor。
2、重写里面三个方法。
public class LoginInterceptor implements HandlerInterceptor{ @Autowired private UserService userService; @Value("${SSO_LOGIN_URL}") private String SSO_LOGIN_URL; @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { TbUser user = userService.getCookieByToken(request, response); if (user == null) { response.sendRedirect(SSO_LOGIN_URL + "?redirectUrl=" + request.getRequestURL()); return false; } return true; //返回false说明拦截, true放行 } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { //拦截后,返回modelAndView之前 } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { //返回modelAndView之后 } }
三、在spingmvc.xml配置拦截器
<!-- 配置拦截器--> <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/item/**"/> <bean class="com.taotao.portal.Interceptor.LoginInterceptor" /> </mvc:interceptor> </mvc:interceptors>
1、path为要拦截的路径。
2、bean写拦截器的全限定类名。