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里面获取的名一样