Passport用户认证
一、设计
1.1 业务流程
- 在购物车之前的功能,不需要对用户登录进行判定
- 在购物车之后的功能,必须要求用户登录的判定通过
- 在购物车功能中,必须对用户登录进行判定,但是判定失败也可以继续使用(程序执行另一个分支)
1.2 登入的三种设计的演变
- session共享
-
token
-
认证中心
1.3 认证中心的设计
1 给用户颁发通行证(token)
2 验证其他业务功能接收token(用户访问所携带的)的真伪
二、代码的实现
2.1 认证中心的整合
1 引入认证中心的静态资源
2 在search模块的页面点击登录链接上加入认证中心的url
3 增加一个测试的结算功能(真正的结算功能在dd模块)
4 加入拦截器(在web-util中加入拦截器,让所有请求到web的请求都被拦截器拦截)
5 加入拦截器
6 加入拦截器的整合类
@Configuration
public class WebMvcConfiguration extends WebMvcConfigurerAdapter {
@Autowired
AuthInterceptor authInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry){
registry.addInterceptor(authInterceptor).addPathPatterns("/**");
super.addInterceptors(registry);
}
}
7 有的方法走拦截器,有的方法不走拦截器
除了可以通过web模块是否扫描拦截器来决定拦截器的使用之外
还可以通过注解的方式来标识具体的方法是否需要通过拦截器
@LoginRequired
第一类方法:不需要进行拦截的方法(没有拦截器注解),直接放行,不加@LoginRequired
第二类方法:需要拦截但是拦截校验失败(用户没登陆或者登录过期了)也可以继续访问的方法,比如说购物车中的所有方法@LoginRequired(loginSuccess=false)
第三类方法:需要拦截,并且拦截校验一定要通过(用户登录成功了)才能访问的方@LoginRequired(loginSuccess=true)