sso-coreSSO 單點登錄框架架構(gòu)
sso-core ,是碼家學(xué)院自研 SSO 單點登錄框架架構(gòu),利用輕量級 JWT 作為 Token 生成方式,JSON 攜帶用戶信息,用戶可以自定義 JWT 加密鹽,在前后端分離上有著非常實用的功效,注解控制認證管理。
直接引入 core 核心包使用(最新版本1.2.2)
<dependency>
<groupId>com.majiaxueyuan</groupId>
<artifactId>sso-core</artifactId>
<version>${version}</version>
</dependency>
完成 SSO 單點登錄只需要兩步:
第一步:搭建統(tǒng)一認證中心(只需要做個登錄,登錄成功授權(quán) token )
當(dāng)用戶在數(shù)據(jù)庫認證成功過后,只需要調(diào)用下面代碼,去生成Token就行
生成Token時需要傳遞四個參數(shù),用戶唯一ID,用戶名,其他信息(建議JSON,每次請求原樣攜帶),加密鹽
生成成功過后,返回Result,判斷code=200時,data就是Token
Result loginSuccess = TokenLoginHelper.loginSuccess(id, username, otherJsonInfo, "pwd_salt");
String token = loginSuccess.getData().toString();
第二步:集成項目完成 SSO 認證(添加過濾器)
在分布式服務(wù)中我們只需要添加一個攔截器就行,添加時需要設(shè)置加密鹽與認證服務(wù)器一致。
如果有多個服務(wù)米個服務(wù)都需要添加一個攔截,就實現(xiàn)了SSO單點登錄的機制。
認證時在請求頭中Authorization中攜帶token信息用于驗證。
@Configuration
public class MaJiaSsoConfig extends WebMvcConfigurerAdapter {@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(ssoIntercepter()).addPathPatterns("/**");
}@Bean
public MaJiaSSOIntercepter ssoIntercepter() {
return new MaJiaSSOIntercepter().setTokenSalt("pwd_salt");
}
}
我們提供了基于注解形式的認證控制,當(dāng)有Mapping不需要認證時,加上注解@NoToken就行
@RequestMapping("/hi")
@NoToken(notNeedToken = true)
public String wei() {
return "hi,no token!";
}
我們會攜帶上用戶傳過來的所有信息(除去加密鹽),用戶在請求中可以用如下代碼獲取信息
SSOUser user = (SSOUser) request.getAttribute("ssoUser");
SSOUser是核心包提供的用戶信息??梢缘玫匠_加密鹽之外用戶傳過來的所有信息。
非常簡單,非常實用!
