1.首先在springmvc.xml中添加配置

  1. <mvc:interceptors>
  2. <mvc:interceptor>
  3. <mvc:mapping path="/user/**" />
  4. <bean class="com.kingdee.system.interceptor.SecurityInterceptor">
  5. <!-- 定义不过滤的url,需要在拦截器中处理这些,spring不会自动处理 -->
  6. <property name="excludedUrls">
  7. <list>
  8. <value>/logon</value>
  9. <value>/login</value>
  10. <value>/register</value>
  11. <value>/save</value>
  12. <value>/logout</value>
  13. </list>
  14. </property>
  15. </bean>
  16. </mvc:interceptor>
  17. </mvc:interceptors>

这里配置path的时候主要注意:path的路径写成/user/*只会匹配user下一级的url,如果要匹配以user开头的所有url,则要改成/user/**

2.拦截器代码

这是一个做登录验证的例子,如果验证失败返回到登录页面

  1. import java.util.List;
  2.  
  3. import javax.servlet.http.HttpServletRequest;
  4. import javax.servlet.http.HttpServletResponse;
  5. import javax.servlet.http.HttpSession;
  6.  
  7. import org.springframework.web.servlet.HandlerInterceptor;
  8. import org.springframework.web.servlet.ModelAndView;
  9.  
  10. import com.kingdee.system.exception.AuthorizationException;
  11.  
  12. public class SecurityInterceptor implements HandlerInterceptor {
  13.  
  14. private List<String> excludedUrls;
  15.  
  16. public void setExcludedUrls(List<String> excludedUrls) {
  17. this.excludedUrls = excludedUrls;
  18. }
  19.  
  20. @Override
  21. public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
  22. System.out.println("intercepter coming...");
  23. //不过滤的url处理
  24. String uri = request.getRequestURI();
  25. for (String url : excludedUrls) {
  26. if (uri.endsWith(url)) {
  27. return true;
  28. }
  29. }
  30.  
  31. //interceptor
  32. HttpSession session = request.getSession();
  33. if (session.getAttribute("user") == null) {
  34. /**
  35. * 第一种方案,直接重定向到登录界面,这里需要注意重定向的路径,最好用绝对路径
  36. * 相对于第二种方案,第一种方案好处是减少异常输出,更直观易理解;缺点是硬编码,用绝对路径才能适配所有url
  37. */
  38. response.sendRedirect("/springmvc/user/logon");
  39. return false;
  40.  
  41. /*第二种方案,直接抛出异常,在spring配置文件中捕获异常并跳转到对应的url
  42. * throw new AuthorizationException();
  43. *
  44. */
  45. }else {
  46. return true;
  47. }
  48. }
  49.  
  50. @Override
  51. public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception e)
  52. throws Exception {
  53.  
  54. }
  55.  
  56. @Override
  57. public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView mv)
  58. throws Exception {
  59.  
  60. }
  61.  
  62. }

代码里的注释已经说明了,我这个demo试验了两种方案。这里的第一种方案的代码,第二种方案需要在springmvc.xml中添加如下配置

  1. <!-- 异常处理 -->
  2. <bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
  3.  
  4. <property name="exceptionMappings">
  5. <props>
  6. <prop key="com.kingdee.system.exception.AuthorizationException">redirect:/user/logon</prop>
  7. </props>
  8. </property>
  9. </bean>

这里只记录了拦截器的主要代码,AuthorizationException直接继承Exception即可,这里不再贴出,如果有需要源码的可以私信我

SpringMVC拦截器配置的更多相关文章

  1. Springboot中SpringMvc拦截器配置与应用(实战)

    一.什么是拦截器,及其作用 拦截器(Interceptor): 用于在某个方法被访问之前进行拦截,然后在方法执行之前或之后加入某些操作,其实就是AOP的一种实现策略.它通过动态拦截Action调用的对 ...

  2. 基于SpringMVC拦截器和注解实现controller中访问权限控制

    SpringMVC的拦截器HandlerInterceptorAdapter对应提供了三个preHandle,postHandle,afterCompletion方法. preHandle在业务处理器 ...

  3. SpringMVC之八:基于SpringMVC拦截器和注解实现controller中访问权限控制

    SpringMVC的拦截器HandlerInterceptorAdapter对应提供了三个preHandle,postHandle,afterCompletion方法. preHandle在业务处理器 ...

  4. SpringMVC拦截器及多拦截器时的执行顺序

    本文链接:https://blog.csdn.net/itcats_cn/article/details/80371639拦截器的配置步骤 springmvc.xml中配置多个拦截器配置自定义拦截器并 ...

  5. springmvc拦截器的配置、使用

    springmvc拦截器的配置.使用:1.自定义拦截器,实现HandlerInterceptor接口. package com.bybo.aca.web.interceptor; import jav ...

  6. spring boot配置springMVC拦截器

    spring boot通过配置springMVC拦截器 配置拦截器比较简单, spring boot配置拦截器, 重写preHandle方法. 1.配置拦截器: 2重写方法 这样就实现了拦截器. 其中 ...

  7. SpringMVC拦截器的配置与使用详解

         一.SpringMVC拦截器简介      Spring MVC的处理器拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理.在springmvc中,定义拦截 ...

  8. springmvc以及springboot中的拦截器配置

    拦截器两种实现   如果不同的controller中都需要拦截器,不能使用相同的拦截器,因为拦截器不能跨controller,这个时候只能为不同的controller配置不同的拦截器,每一个拦截器只能 ...

  9. SpringMVC拦截器的使用

    SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理.比如通过它来进行权限验证,或者是来判断用户是否登陆,或者是像12306 那 ...

随机推荐

  1. java-为什么非静态内部类中不能有static修饰的属性,但却可以有final常量?

    - 例: public class Demo{ int x; class A{ static int a = 0; //这样写是不合法的. static final int b=0; //这样写是合法 ...

  2. 神坑,使用gcc对opencv重编译

    工具 cmake-3.9.1 opencv-3.3.0  gcc-6.3.0 前几天为了装eclipse的CDT,把minggw里的make改了,今天突然想学opencv,可是只找到了vc版本,千辛万 ...

  3. hdu3746 Cyclic Nacklace KMP

    CC always becomes very depressed at the end of this month, he has checked his credit card yesterday, ...

  4. 01c++学习

    #include"iostream" using namespace std; void main01() { //printf("hello_world\n" ...

  5. APACHE如何里一个站点绑定多个域名?用ServerAlias servername

    APACHE2如何里一个站点绑定多个域名?用ServerAlias以前很笨,要使多个域名指向同一站点总是这样写: <VirtualHost *:80>ServerAdmin i@kuigg ...

  6. Python自建collections模块

    本篇将学习python的另一个内建模块collections,更多内容请参考:Python学习指南 collections是Python内建的一个集合模块,提供了许多有用的集合类. namedtupl ...

  7. NALU数据打RTP包流程详解

    最近在看RTP发送H264数据的文章,感觉很乱,没有比较清晰易懂的教程,自己整理了一下各种资料,备忘! --------Part A  ---- 先说说H264数据,H264在网络传输的是NALU(N ...

  8. 《代码大全》的作者Steve McConnell

    Steve McConnell是Construx公司首席软件工程师,在公司里监督软件工程实施.他是软件工程知识体(SWEBOK) 项目构建知识领域的领导.Steve曾为微软公司.波音公司和西雅图地区的 ...

  9. pycharm Process finished with exit code (0xC0000005)

    pycharm  Process finished with exit code  (0xC0000005)解决办法 上次报过这个错误,是在安装浏览器时发现的,报过同样的错误.按当时的方法,以为切地解 ...

  10. 删除JavaScript对象中的元素

    参考http://stackoverflow.com/questions/208105/how-to-remove-a-property-from-a-javascript-object 通过dojo ...