• 第一道防线__SpringMVC配置拦截器


       这几天在公司自己开发一个小系统,但是系统的安全性也得考虑,起初没注意,赶急就光关心业务逻辑和实现效果。最后老大一出手,就把最严重的问题指出来了,他说你这根本没安全性可言,于是我试着将公司使用的spring security框架拿过来,但是在这之前我又尝试配置一下springmvc的拦截器,也可以说是网站的第一道防线。

      这里我就拿用户登录问题来说吧。

      1、首先自己手动编写一个拦截器类(自定义拦截器类),伪代码如下:

     1 public class LoginInterceptor implements HandlerInterceptor {
     3     @Override
     4     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
     5             throws Exception {
     6         LoginInfo user = (LoginInfo)request.getSession().getAttribute("info");
     7         if (user == null) {
     8             System.out.println("尚未登录,调到登录页面");
     9             response.sendRedirect("/");
    10             return false;
    11         }
    13         return true;
    14     }
    16     @Override
    17     public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
    18             ModelAndView modelAndView) throws Exception {
    19         System.out.println("postHandle");
    20 
    21     }
    23     @Override
    24     public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
    25             throws Exception {
    26         System.out.println("afterCompletion");
    28     }
    30 }

        说一下这个自定义拦截器类吧,首先他要想成为一个拦截器,就必须得先继承HandlerInterceptor接口,继承该接口后必须实现3个方法。

      方法preHandel主要是请求处理之前调用,也就是将你需要把什么样的请求拦截,什么样的请求不拦截做出逻辑处理。其他俩个方法你可以不做任何处理。

      2、在springmvc核心配置文件中配置:

     1   <mvc:interceptors>
     2         <mvc:interceptor>
     3             <!-- 拦截所有URL中包含/customer/的请求 -->
     4             <mvc:mapping path="/customer/*"/>
     5             <mvc:mapping path="/task/*"/> 
     6             <mvc:mapping path="/app/*"/> 
     7             <mvc:mapping path="/user/*"/>
     8             <mvc:mapping path="/transfer/*"/>
     9             <mvc:mapping path="/cgs/*"/>
    10             <mvc:mapping path="/owner/*"/>
    11             <mvc:mapping path="/mortgager/*"/>
    12             <!-- 不需要拦截的请求 -->
    13             <mvc:exclude-mapping path="/cgs/login"/> 
    14             <bean id="loginInterceptor" class="com.tgsit.cgs.interceptor.LoginInterceptor"/>
    15         </mvc:interceptor>
    16     </mvc:interceptors>

        这里需要说明一点:配置需要拦截的请求时,如果后面没有/**,则它会拦截所有的controller。

      还有,很多哥们儿会忽略的一点就是没有配置不需要拦截的请求,当然我们网站的注册和登录请求时不能被拦截的,所以记得在配置的时候顺带配置一下不需要拦截的请求。

  • 相关阅读:
    Linux C下的正则表达式
    中英文i18 vue参数传递
    es map的用法
    webpack中publicPath问题
    prop中如何获取vue data中的数据 中英文方案
    利用map reduce方法将对象转成数组
    WPF 踩坑笔记2
    WPF 踩坑笔记1
    RabbitMQ 高阶用法 之 x-expire 过期时间设置
    JANUSEC应用网关1.0发布,提供一站式安全交付能力
  • 原文地址:https://www.cnblogs.com/1315925303zxz/p/6859873.html
Copyright © 2020-2023  润新知