hooyantsing's Blog

第135次课程_微服务架构案例T6L6

字数统计: 545阅读时长: 2 min
2020/03/29

源辰76班

第135次课程

2020.03.29

内容

微服务架构案例T6L6[廖彦]

项目路径:****G:\YC74\200322_微服务架构案例T1L1\code

1.拦截器 (过滤器)

1.在业务模块的启动类内实现WebMvcConfigurer接口,并实现接口添加拦截器。

EbuyIndexApplication.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package com.yc.ebuy;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import  org.springframework.boot.autoconfigure.SpringBootApplication;
import  org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker;
import org.springframework.cloud.openfeign.EnableFeignClients;
import  org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;
import  org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import  org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import com.yc.ebuy.web.LoginInterceptor;
@SpringBootApplication
//MyBatis 接口组件扫描
@MapperScan("com.yc.ebuy")
//开启声明式远程调用
@EnableFeignClients
//服务熔断降级开关
@EnableCircuitBreaker
//spring会话共享注解
@EnableRedisHttpSession
public class EbuyIndexAppcation implements WebMvcConfigurer {
     public static void main(String[] args) {
           SpringApplication.run(EbuyIndexAppcation.class,  args);
     }
     
     
     /**
      * SpringBoot定义拦截器
      * 1. 如果没有引入资源, 可以不用加组件注解
      * 2. 简单配置实现 WebMvcConfigurer , 高级配置继承  WebMvcConfigurationSupport
      * 3. SpringBoot 启动类可以直接继承或实现
      */
     /*
      * 拦截器配置 addPathPatterns拦截 excludePathPatterns不拦截(排除)
      */
     @Override
     public void addInterceptors(InterceptorRegistry registry)  {
           registry.addInterceptor(new  LoginInterceptor()).addPathPatterns("/addCart");
     }
}

2.创建一个拦截器代码逻辑的类,实现HandlerInterceptor接口,并实现其中的方法(方法就是前置过滤或其他过滤方式)。

LoginInterceptor.java

例如:这个样例中实现了如果用户没有登录,先将浏览的页面加入到session里,然后跳转至登录页面。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package com.yc.ebuy.web;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.web.servlet.HandlerInterceptor;
/**
* SpringBoot定义拦截器
* 1. 如果没有引入资源, 可以不用加组件注解
* 2. 简单配置实现 WebMvcConfigurer , 高级配置继承  WebMvcConfigurationSupport
* 3. 启动类可以直接继承或实现
*/
public class LoginInterceptor implements HandlerInterceptor{
     /**
      *   返回 true 允许访问目标资源
      */
     @Override
     public boolean preHandle(HttpServletRequest request,  HttpServletResponse response, Object handler)
                throws Exception {
           HttpSession session = request.getSession();
           if(session.getAttribute("loginedUser") == null) {
                String uri = request.getRequestURI();
                System.out.println("=======uri=======" + uri);
                // 保存当前用户访问的地址和参数( GET )
                session.setAttribute("uri", uri);
                System.out.println("session id: " +  session.getId());
                response.sendRedirect("http://127.0.0.1/tologin");
                return false;
           }
           return true;
     }
}
CATALOG