0
点赞
收藏
分享

微信扫一扫

SpringMVC - 拦截器

       在SpringMVC中 我们说到了拦截器 , 它会在映射处理器(HandleMapping)执行时检查我们
访问的地址是否配置拦截器 , 在拦截器中实现一些功能

 

首先我们来看第一个方法 : boolean preHandle()

         意思就是说呢 , 当请求到达我们控制层方法时, 会先进入这个方法中, 根据preHandle() 方法的
返回结果(true 和 false) 来决定下一步如何执行

  
      后两个方法 : void postHandle()     afterCompletion()
      首先第一个方法是控制层方法执行后会执行, 第二个方法时整个请求结束后执行, 因为版本原因, 这两个方法的使用频率较低, 所以这里我们做一个了解即可

      接着我们去搭建一个拦截器看看到底是怎么一回事

//自己编写一个类PreInterceptor 实现 HandlerInterceptor接口 , 重写preHandle方法
public class PreInterceptor implements HandlerInterceptor {
    //此方法返回true ,请求才能顺利到达相应的处理方法中,否则会被拦截
    @Override
    public boolean preHandle(HttpServletRequest request, 
            HttpServletResponse response, Object handler) throws Exception {
        //第三个参数为目标控制器对象
        HttpSession session= request.getSession();
        //判断信息是否有效
        Admin admin = (Admin) session.getAttribute("admin");
        if (admin==null){
            response.getWriter().print(202);
            return false;
        }else {
            return true;
        }
    }
}

      接着需要去配置文件中配置拦截器

<!--配置拦截器-->
<mvc:interceptors>
    <mvc:interceptor>
        <!--所有请求都进入拦截器-->
        <mvc:mapping path="/**"/>
        <!--指定哪些请求不进入拦截器-->
        <mvc:exclude-mapping path="/login/login"/>
        <mvc:exclude-mapping path="/css/**"/>
        <mvc:exclude-mapping path="/images/**"/>
        <mvc:exclude-mapping path="/js/**"/>
        <mvc:exclude-mapping path="/**.html"/>
        <!--拦截器实现类-->
        <bean id="login" class="com.ff.ssm.util.PreInterceptor"/>
    </mvc:interceptor>
</mvc:interceptors>

这里我们以后端登录 的控制器为例

@RestController
@RequestMapping(value = "/login")
public class LoginController {

    @Autowired
    LoginService loginService;

    @PostMapping(value = "/login")
    public CommonResult adminLogin(Admin admin, HttpSession session){
        CommonResult commonResult;
        try {
            Admin admin1 = loginService.login(admin);
            if(admin1==null){
                commonResult=new CommonResult(201,"账号或密码错误",admin1);
            }else  {
                session.setAttribute("admin",admin1);
                commonResult=new CommonResult(200,"登录成功",admin1);
            }
        }catch (Exception e){
            commonResult=new CommonResult(500,"登录失败","");
        }
        return commonResult;
    }
}

         如上, 前端发起了登录请求 , 我们配置了拦截器, 会先进入拦截器 , 根据 preHandle() 方法决定
是否可以进入到我们具体的登录方法中 

      以上就是SpringMVC中拦截器的具体功能和实现 , 感谢阅读
 

    

举报

相关推荐

0 条评论