当前位置:   article > 正文

通过Spring MVC 的自定义拦截器实现灵活的登录拦截_拦截器灵活拦截

拦截器灵活拦截
SpringMVC 中的Interceptor 拦截器,它的主要作用是拦截用户的请求并进行相应的处理。用户可以自定义拦截器来实现特定的功能,比如通过它来进行权限验证,或者是来判断用户是否登陆等。
SpringMVC的拦截器提供了HandlerInterceptorAdapter抽象类,对应提供了三个preHandle,postHandle,afterCompletion方法。
preHandle在业务处理器处理请求之前被调用,
postHandle在业务处理器处理请求执行完成后,生成视图之前执行,
afterCompletion在DispatcherServlet完全处理完请求后被调用,可用于清理资源等 。
所以要想实现自己的拦截管理逻辑,需要继承HandlerInterceptorAdapter并重写其三个方法。
下面以一个例子来通过SpringMVC 中的自定义Interceptor实现灵活的登录拦截,实现方式很简单。
 
1、新建一个CommInterceptor 继承 HandlerInterceptorAdapter 并重写其中三个方法。
  1. public class CommInterceptor extends HandlerInterceptorAdapter{
  2. private final Logger log = LoggerFactory.getLogger(CommInterceptor.class);
  3. public String defultLogin="/account/login";//默认登录页面
  4. public Map<String,String> defineUrls;//自定义的Url,自定义拦截后的处理页面。
  5. @Override
  6. public boolean preHandle(HttpServletRequest request,
  7. HttpServletResponse response, Object handler) throws Exception {
  8. //从session获取登录信息
  9. if(SessionUtils.getAttribute(request, "user")!=null)
  10. {
  11. return true;
  12. }
  13. else
  14. {
  15. if(defineUrls!=null&&defineUrls.size()>0)
  16. {
  17. if(defineUrls.containsKey(url))
  18. {
  19. defultLogin=defineUrls.get(url).toString();
  20. }
  21. }
  22. log.info("Interceptor:跳转到login页面!"+defultLogin+"-----");
  23. response.sendRedirect(request.getContextPath()+defultLogin);
  24. return false;
  25. }
  26. }
  27. @Override
  28. public void postHandle(HttpServletRequest request,
  29. HttpServletResponse response, Object handler,
  30. ModelAndView modelAndView) throws Exception {
  31. }
  32. @Override
  33. public void afterCompletion(HttpServletRequest request,
  34. HttpServletResponse response, Object handler, Exception ex)
  35. throws Exception {
  36. }
  37. public String getDefultLogin() {
  38. return defultLogin;
  39. }
  40. public void setDefultLogin(String defultLogin) {
  41. this.defultLogin = defultLogin;
  42. }
  43. public Map<String, String> getDefineUrls() {
  44. return defineUrls;
  45. }
  46. public void setDefineUrls(Map<String, String> defineUrls) {
  47. this.defineUrls = defineUrls;
  48. }
  49. }
2、在Spring 配置文件中配置自定义的拦截器。
  1. <!--配置拦截器 -->
  2. <mvc:interceptors>
  3. <mvc:interceptor>
  4. <!--
  5. /**的意思是所有文件夹及里面的子文件夹
  6. /*是所有文件夹,不含子文件夹
  7. /是web项目的根目录
  8. -->
  9. <mvc:mapping path="/personCenter/*" />
  10. <mvc:mapping path="/web/exam/yuDingXinXi" />
  11. <mvc:mapping path="/web/preRegister/goYuYueDingDan" />
  12. <!-- 微信预约体检 -->
  13. <mvc:mapping path="/exam/yuDingXinXi" />
  14. <!-- 微信体质辨识 -->
  15. <mvc:mapping path="/healthJudge/healthJudge" />
  16. <bean class="com.xxx.webportal.chp.common.interceptor.CommInterceptor">
  17. <!--定义拦截后重定向到默认的登录处理页面 -->
  18. <property name="defultLogin" value="/account/login" />
  19. <!--定义拦截后重定向到其他登录处理页面 -->
  20. <property name="defineUrls">
  21. <map>
  22. <entry key="/exam/yuDingXinXi" value="/connect/wx/start" />
  23. <entry key="/healthJudge/healthJudge" value="/connect/wx/start" />
  24. </map>
  25. </property>
  26. </bean>
  27. </mvc:interceptor>
  28. </mvc:interceptors>
这样就实现了灵活的登录拦截,并且能够根据不同的场景重新定向到不同的登录处理页面,我这里是拦截的需要登录的URL,如果是网站的走默认登录页面,微信的走微信认证登录的页面。
 
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/966893
推荐阅读
相关标签
  

闽ICP备14008679号