Spring Boot中的拦截器配置

Spring Boot中的拦截器

在做项目的时候经常会有登录,而且如果不登录还不能访问其他的页面这就需要拦截器 就是通过session验证 session有效力在一次会话中有效,
就像你打电话通过机器人客服可以转接到售后,咨询等客服就是一次会话!直到你挂掉电话也就是session的销毁

第一步


import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

public class Interceptor1 implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response,Object handler) throws Exception{
        HttpSession session=request.getSession();
        Object ob=session.getAttribute("uname");
        if (ob!=null) {
            return true;
        }
        session.setAttribute("preurl",request.getRequestURI());
        StringBuffer url = request.getRequestURL();
        String tempContextUrl = url.delete(url.length() - request.getRequestURI().length(), url.length()).append(request.getServletContext().getContextPath()).append("/").toString();
        response.sendRedirect("/index/login");
        return false;
    }
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response,
           Object handler,ModelAndView model) throws Exception{
    }
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
             Object handler,Exception ex) throws Exception{
    }

}

新建一个java文件把这个代码赋值到java文件中,并且放在与控制器同级目录下
在这里插入图片描述
在这里我的名字是Interceptor1.java

response.sendRedirect("/index/login");

注意了这一代码的意思是你在不登录的状态下,你访问的页面等等都会被拦截同时会跳转到你的"/index/login"页面也就是登录页面(可以换成其他的页面)

第二步

需要把拦截器放到启动类

	@Override
    public void addInterceptors(InterceptorRegistry registry){
        InterceptorRegistration ir=registry.addInterceptor(new Interceptor1());
        ir.addPathPatterns("/**");
        ir.excludePathPatterns("/index/login","/index/yanzheng","/js/**");
    }

ir.excludePathPatterns();里面的路径是不需要拦截的,也就是你的登录页面Login 以及 你验证的方法 如果有验证码的话生成验证码的方法也要放开,不然无发生成相应的验证码

public class Application(你的启动类)implements WebMvcConfigurer

如果不实现这个接口的话你导入玩相应的包会报错,会让你把删除掉,这样是不对的

第三步

最后一步就是你的的验证了,在你验证的时候你要对session进行赋值

	@RequestMapping(value="yanzheng")
	@ResponseBody
	public String yanzheng(HttpServletRequest request){
		HttpSession session=request.getSession();
		String uname=request.getParameter("uname");//h获取用户名
		String code=request.getParameter("code");//获取验证码
		String pwd=request.getParameter("pwd"),re="0";//获取密码
		System.out.println(session.getAttribute("verCode")+"---"+code);
		if (!code.toLowerCase().equals(session.getAttribute("verCode"))) {
			return re="3";
		}//将获取的值和验证码省城的值比较
		Users users=usersService.findYan(uname,pwd);
		if (users==null || users.equals("")) {
			re="2";
		}else {
			session.setAttribute("uname", uname);  //在这里给session赋值
			session.setAttribute("uid",users.getUid());
			re="1";
		}
        return re;
	}

给session赋完值后就完成了,session值的名字是自己随意起的但是要和
Interceptor1.java里面获取的名一样

在这里插入图片描述

这样一个拦截器就做好了

发布了34 篇原创文章 · 获赞 5 · 访问量 2276

猜你喜欢

转载自blog.csdn.net/tanfei_/article/details/102808122