Passport用户认证
1.介紹
1.在購物車之前功能,不需要對用戶登陸進(jìn)行判定
2.在購物車之后的功能必須對用戶登錄進(jìn)行判定
3.在購物車功能中,必須對購物車進(jìn)行判定,但是判定失敗也
可以繼續(xù)使用(程序可以繼續(xù)執(zhí)行cookie分支)
2.登陸的入口
1.直接點(diǎn)擊登陸登錄功能
2.結(jié)算時(shí)被登錄攔截
3.認(rèn)證中心的設(shè)計(jì)
1.給用戶辦法通行證token
2.驗(yàn)證其他業(yè)務(wù)功能接受的token(用戶訪問攜帶的)真?zhèn)?br />
4.認(rèn)證中心的整合
1.引入認(rèn)證中心的靜態(tài)資源
2.在search-web模塊的頁面點(diǎn)擊登陸鏈接上加入認(rèn)證中心url
3.增加一個(gè)測試的結(jié)算功能(真正的結(jié)算模塊在訂單模塊)
4.加入攔截器(web-util加入攔截器,讓所有請求web的應(yīng)用都被攔截)
5.加入攔截器具體代碼
@Component public class AuthInterceptor extends HandlerInterceptorAdapter {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {/*** 攔截代碼*/return true;} }6.加入攔截器整合類
@Configuration public class WebMvcConfiguration extends WebMvcConfigurerAdapter {@AutowiredAuthInterceptor authInterceptor;@Overridepublic void addInterceptors(InterceptorRegistry registry){registry.addInterceptor(authInterceptor).addPathPatterns("/**");super.addInterceptors(registry);} }7.攔截器的具體使用方式
1.通過web模塊是否掃描攔截器來來決定攔截器的使用
2.可過注解的方式來標(biāo)識具體的是否要通過攔截器@LoginRequired
第一類方法:不需要進(jìn)行攔截的方法(沒有攔截器注解)直接放行
第二類方法:需要攔截但攔截校驗(yàn)失敗(用戶沒登陸或登錄過期)也可以繼續(xù)訪問失敗也可以訪問,比如購物車的所有方法@LoginRequired(loginSuccess=false)
第三類方法:需要攔截,但攔截校驗(yàn)一定要通過(用戶登陸成功了)才能訪問@LoginRequired(loginSuccess=true)
5.JWT加密算算法
1.JWT工具類JwtUtil
public class JwtUtil {public static String encode(String key,Map<String,Object> param,String salt){if(salt!=null){key+=salt;}JwtBuilder jwtBuilder = Jwts.builder().signWith(SignatureAlgorithm.HS256,key);jwtBuilder = jwtBuilder.setClaims(param);String token = jwtBuilder.compact();return token;}public static Map<String,Object> decode(String token ,String key,String salt){Claims claims=null;if (salt!=null){key+=salt;}try {claims= Jwts.parser().setSigningKey(key).parseClaimsJws(token).getBody();} catch ( JwtException e) {return null;}return claims;} }2.測試程序
public class Test {public static void main(String[] args) {HashMap<String, Object> hashMap = new HashMap<String, Object>();hashMap.put("name","steven");hashMap.put("password","324756");String ip="127.0.0.1";Date date=new Date();SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");String format = dateFormat.format(date);String encode = JwtUtil.encode("2019gmall0105", hashMap, ip + format);System.out.println(encode);}}5.passport登錄功能
1.點(diǎn)擊按鈕,在登陸頁面輸入用戶名和密碼驗(yàn)證用戶登錄是否成功,生成jwt的token返回到search.gmall.com/index,再攔截器里返回的token寫入cookie
2.點(diǎn)擊結(jié)算按鈕,攔截器攔截請求
A 該用戶沒有登陸,并且請求時(shí)必須要登陸,將用戶打回到認(rèn)證中心進(jìn)行登陸
B 該用戶沒登陸,并且結(jié)算請求時(shí)沒有登陸也可以訪問(不可能發(fā)生),放行
3.在被攔截登陸后,返回原始請求(攜帶登陸成功后頒發(fā)的token)
4.原始請求的攔截器二次被攔截請求,攔截請求后,將頒發(fā)token寫入cookie
6.從首頁點(diǎn)擊登陸流程
1.首頁訪問登錄頁,攜帶ReturnUrl跳轉(zhuǎn)地址
2.登錄頁保存跳轉(zhuǎn)地址
@RequestMapping("index")public String index(String ReturnUrl, ModelMap map){map.put("ReturnUrl",ReturnUrl);return "index";}3.登錄頁通過異步方法驗(yàn)證用戶名和密碼
4.辦法token給異步ajax
5.異步Ajax得到token,然后根據(jù)跳轉(zhuǎn)地址ReturnUrl訪問原始功能
0.請求原始應(yīng)用
1.被攔截器攔截
2.攔截器通過注解判斷
是否需要進(jìn)行身份驗(yàn)證
是否必須通過身份驗(yàn)證
4.在認(rèn)證中心登陸后,進(jìn)行重新的請求,請求原始應(yīng)用
輸入用戶名密碼后進(jìn)行第二次請求(請求原始地址)
5.驗(yàn)證通過httpClient(Apache一個(gè)通用工具類)
6.驗(yàn)證結(jié)果結(jié)合注解的情況
總結(jié)
以上是生活随笔為你收集整理的Passport用户认证的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Dubbo启动时qos-server c
- 下一篇: 社交登录整合