srpingboot拦截器

1、创建一个普通的web工程。

srpingboot拦截器

srpingboot拦截器

 

 

 2、先创建需要的基础文件,比如一个用户类。

package com.example.mode;  public class User {     private Integer id;     private String name;      public Integer getId() {         return id;     }      public void setId(Integer id) {         this.id = id;     }      public String getName() {         return name;     }      public void setName(String name) {         this.name = name;     } }

再创建一个监听类,这个类继承自HandlerInterceptor,然后,在这个类里就可以处理一些监听到的信息,比如有的登陆,有的没有登陆。

package com.example.interceptor;  import com.example.mode.User; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView;  import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;  public class MyInterceptor implements HandlerInterceptor {     @Override     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {         //这里编写拦截规则,可以从session中获取用户信息,这个名为user的attribute对象如果为空,就返回error,因为没有登陆 //        如果这个对象存在,就返回true,不做任何处理。         User user= (User) request.getSession().getAttribute("user");         if(user==null) {             response.sendRedirect(request.getContextPath()+"/user/error");             return false;         }          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 {      } }

这里还要建一个监听配置类,这个配置类来决定监听的对象集合,监听的类型,这里主要是监听web网页,所以,还要实现一个

WebMvcConfigurer接口,然后重写这个接口里的addInterceptor程序,把上面的MyInterceptor监听类,添加到web网页监听中去。
package com.example.config;  import com.example.interceptor.MyInterceptor; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration public class MyInterceptorConfig implements WebMvcConfigurer {     @Override     public void addInterceptors(InterceptorRegistry registry) {         //要拦截的路径集合         String[] addPathPatterns={"/user/**"};         //要排除的路径集合         String[] excludePathPatterns={"/user/out","/user/error","/user/login"};         //将规则集合添加到注册中         registry.addInterceptor(new MyInterceptor())                 .addPathPatterns(addPathPatterns)                 .excludePathPatterns(excludePathPatterns);     } }

这些工作都做完了,现在可以去编写控制类了,

package com.example.control;  import com.example.mode.User; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;  import javax.servlet.http.HttpServletRequest;  //这个注释是表明这个类是一个Controller,还有就是以下所有方法都带ResponseBody @RestController //这里是为了方便,以后所有的指向都会默认指向/user/后面的路径了 @RequestMapping("/user") public class MyController { //    以下为登陆方法,在里面可以检查登陆信息,然后填充request对象,再定向到需要的页面。     @RequestMapping("/login")     public Object login(HttpServletRequest request){         User user=new User();         user.setId(1001);         user.setName("翠花");         request.getSession().setAttribute("user",user);         return "登陆成功";     } //    登陆成功以后,定位到用户中心页面     @RequestMapping("/center")     public Object center(HttpServletRequest request){         User user=(User) request.getSession().getAttribute("user");         return "欢迎编号为:"+user.getId()+"  用户:"+user.getName();     } //    没有登陆的用户访问的内容     @RequestMapping("/out")     public Object out(){         return "普通用户访问页面";     } //    当非登陆用户访问到某些页面时会定向到出错页面。     @RequestMapping("/error")     public Object error(){         return "请登陆后再访问,谢谢!";     } }

然后就可以直接运行了。

发表评论

相关文章