SpringBoot注册Fiter(过滤器)和Listener(监听器)

痛定思痛。 2022-05-08 15:08 336阅读 0赞

一、SpingBoot注册Filter

1、创建filter类及其注册配置类,用于过滤某些需要登陆后才可以访问的接口

  1. 自定义过滤器
  2. @Component
  3. public class PayFilter implements Filter {
  4. @Override
  5. public void init(FilterConfig filterConfig) throws ServletException {}
  6. @Override
  7. public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
  8. HttpServletRequest request= (HttpServletRequest) servletRequest;
  9. Boolean f= (Boolean) request.getSession().getAttribute("login");
  10. if (f!=null&&f){
  11. filterChain.doFilter(servletRequest,servletResponse);
  12. }else {
  13. System.out.println("***********您还未登陆,请登录后操作***********");
  14. }
  15. }
  16. @Override
  17. public void destroy() {}
  18. }
  19. spring容器中注册PayFilter
  20. @Configuration
  21. public class PayFilterConfigure {
  22. private final PayFilter payFilter;
  23. @Autowired
  24. public PayFilterConfigure(PayFilter payFilter) {
  25. this.payFilter = payFilter;
  26. }
  27. @Bean
  28. public FilterRegistrationBean registrationBean(){
  29. FilterRegistrationBean<PayFilter> bean=new FilterRegistrationBean<>();
  30. bean.setFilter(payFilter);
  31. bean.addUrlPatterns("/pay/*"); //过滤/pay相关的url
  32. return bean;
  33. }
  34. }
  35. 2、创建支付和登陆的controller
  36. //登陆接口
  37. @Controller
  38. public class UserCtl {
  39. @GetMapping("/login")
  40. @ResponseBody
  41. public String login(HttpServletRequest request){
  42. request.getSession().setAttribute("login",true);
  43. return "登陆成功";
  44. }
  45. }
  46. //支付接口
  47. @RestController
  48. @RequestMapping("/pay")
  49. public class PayCtl {
  50. @GetMapping("/order")
  51. public String pay(){
  52. return "恭喜您,订单支付成功";
  53. }
  54. }

二、SpringBoot注册监听器

javaweb共有8种类监听器

70此处以ServletContextListener为例

  1. /**
  2. * 自定义监听器
  3. */
  4. @Component
  5. public class PayContextListener implements HttpSessionListener {
  6. private int count;
  7. @Override
  8. public void sessionCreated(HttpSessionEvent httpSessionEvent) {
  9. count++;
  10. ServletContext servletContext= httpSessionEvent.getSession().getServletContext();
  11. servletContext.setAttribute("count",count);
  12. System.out.println("PayContextListener监听在线人数count="+count+"人");
  13. }
  14. @Override
  15. public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
  16. count--;
  17. ServletContext servletContext= httpSessionEvent.getSession().getServletContext();
  18. servletContext.setAttribute("count",count);
  19. }
  20. }
  21. /**
  22. * 配置监听器
  23. */
  24. @Configuration
  25. public class PayListenerConfigure {
  26. private final PayContextListener payListener;
  27. @Autowired
  28. public PayListenerConfigure(PayContextListener payListener) {
  29. this.payListener = payListener;
  30. }
  31. @Bean
  32. public ServletListenerRegistrationBean payListener(){
  33. ServletListenerRegistrationBean<PayContextListener> payListenerBean=new ServletListenerRegistrationBean<>();
  34. payListenerBean.setListener(payListener);
  35. System.out.println("PayContextListener被注入到spring容器");
  36. return payListenerBean;
  37. }
  38. }

发表评论

表情:
评论列表 (有 0 条评论,336人围观)

还没有评论,来说两句吧...

相关阅读