博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
springboot -- 拦截器(HandlerInterceptor)
阅读量:3922 次
发布时间:2019-05-23

本文共 2060 字,大约阅读时间需要 6 分钟。

前言

拦截器一般用于检测用户是否有登录, 防止未登录时用户直接输入映射地址跳转到需要登录的页面

正文

package com.atguigu.springboot.component;import org.springframework.web.servlet.HandlerInterceptor;import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class LoginHandlerInterceptor implements HandlerInterceptor {
/* 处理器方法执行前执行 */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String user = (String) request.getSession().getAttribute("loginUser"); if(null==user){
request.setAttribute("msg", "你仍未登录..."); request.getRequestDispatcher("/index").forward(request, response); return false; } else{
return true; } } /* 处理器方法执行后执行 */ @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
} /* 页面渲染后执行 */ @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
}}

创建一个LoginHandlerInterceptor实现拦截器接口的类, 重写preHandle方法;

其中request.getSession().getAttribute(“loginUser”);
是在登录成功时 session.setAttribute(“loginUser”,username);
已经设置好的

这里为何要用服务端跳转呢?

1、客户端跳转不能传送数据, 所以 request.setAttribute(“msg”, "你仍 未登录…"); 不能传送到页面上。

2、如果要用客户端跳转的话,要这样写response.sendRedirect(“/server.context-path/rrr”);

@Configurationpublic class MyMvcConfig extends WebMvcConfigurerAdapter {
//保险做法是将该拦截器投入到容器中, 否则可能会拦截器会报某个变量空指针异常 @Bean public LoginHandlerInterceptor getLoginHandlerInterceptor() {
return new LoginHandlerInterceptor(); } @Override public void addInterceptors(InterceptorRegistry registry) {
//添加拦截器 registry.addInterceptor(getLoginHandlerInterceptor()).addPathPatterns("/**").excludePathPatterns("/rrr"); };

在mvc配置中加上addInterceptors方法;

addPathPatterns("/") 表示所有映射地址都会拦截;**

excludePathPatterns("/rrr");是指除了这些映射地址之外

转载地址:http://auern.baihongyu.com/

你可能感兴趣的文章
模式21.中介者模式-Java
查看>>
剑指 Offer 46. 把数字翻译成字符串
查看>>
剑指 Offer 48. 最长不含重复字符的子字符串
查看>>
剑指 Offer 49. 丑数
查看>>
剑指 Offer 50. 第一个只出现一次的字符
查看>>
模式23.解释器模式-Java
查看>>
模式22.享元模式-Java
查看>>
剑指 Offer 52. 两个链表的第一个公共节点
查看>>
剑指 Offer 53 - I. 在排序数组中查找数字 I
查看>>
剑指 Offer 53 - II. 0~n-1中缺失的数字
查看>>
剑指 Offer 54. 二叉搜索树的第k大节点
查看>>
剑指 Offer 55 - I. 二叉树的深度
查看>>
剑指 Offer 55 - II. 平衡二叉树
查看>>
剑指 Offer 56 - I. 数组中数字出现的次数
查看>>
模式24.访问者模式-Java
查看>>
剑指 Offer 56 - II. 数组中数字出现的次数 II
查看>>
剑指 Offer 57. 和为s的两个数字
查看>>
剑指 Offer 57 - II. 和为s的连续正数序列
查看>>
剑指 Offer 58 - I. 翻转单词顺序
查看>>
剑指 Offer 58 - II. 左旋转字符串
查看>>