使用XXL-SSO實現登錄認證以及權限管控
本文指導如何使用 XXL-SSO 與實現 登錄認證以及權限管控;通過實際項目(XXL-BOOT/快速開發平臺)集成應用,進行詳細講解。

XXL-SSO簡介
XXL-SSO 是一個 單點登錄框架,只需要登錄一次就可以訪問所有相互信任的應用系統。具備 “輕量級、高擴展、漸進式” 的等特性,支持 “登錄認證、權限認證、角色認證、分布式會話認證、單點登錄、Web常規登錄、前后端分離” 等多登錄及認證類型,現已開放源代碼,開箱即用。

XXL-BOOT簡介
XXL-BOOT 是一個快速開發平臺,易學易用、靈活擴展、開箱即用。內置安全登錄、權限管控、端到端代碼生成、響應式布局、多語言、通告觸達……等能力。整合前后端流行技術,致力為 中小企業、個人開發者 打造開箱即用的中后臺解決方案。
XXL-SSO集成
補充說明:XXL-SSO 是一個 “漸進式” 登錄及權限認證框架,從簡單到復雜場景均提供支持,包括:單體系統、前后端分離、分布式系統、單點登錄等。本文以“XXL-BOOT”項目集成講解“單體系統”如何集成使用,更復雜場景建議參考官方文檔以及提供Sample集成示例。
第一步:引入maven依賴
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-sso-core</artifactId>
<version>${xxl-sso.version}</version>
</dependency>
第二步:XXL-SSO組件配置
配置文件:更詳細配置可參考項目文檔。
### xxl-sso 登錄憑證/token傳輸key, 用于cookie、header登錄憑證傳輸;
xxl-sso.token.key=xxl_sso_token
### xxl-sso 登錄憑證/token超時時間,單位毫秒;
xxl-sso.token.timeout=604800000
### xxl-sso 客戶端過濾排除路徑,如 "/excluded/xpath"?"/excluded/xpath,/excluded/*"
xxl-sso.client.excluded.paths=
### xxl-sso 客戶端登錄頁路徑
xxl.sso.client.login.path=/auth/login
組件配置:主要進行 “攔截器注冊” 以及基礎框架組件初始化。
/**
* 1、配置 XxlSsoBootstrap
*/
@Bean(initMethod = "start", destroyMethod = "stop")
public XxlSsoBootstrap xxlSsoBootstrap() {
XxlSsoBootstrap bootstrap = new XxlSsoBootstrap();
bootstrap.setLoginStore(loginStore);
bootstrap.setTokenKey(tokenKey);
bootstrap.setTokenTimeout(tokenTimeout);
return bootstrap;
}
/**
* 2、配置 XxlSso 攔截器
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
// 2.1、build xxl-sso interceptor
XxlSsoWebInterceptor webInterceptor = new XxlSsoWebInterceptor(excludedPaths, loginPath);
// 2.2、add interceptor
registry.addInterceptor(webInterceptor).addPathPatterns("/**");
}
第三步:登錄/注銷 功能集成
XXl-SSO提供豐富的登錄、注銷、登錄態、角色/權限驗證相關API。此處通過 “XxlSsoHelper.loginWithCookie、XxlSsoHelper.logoutWithCookie” 等API實現集成。
登錄接口:
@RequestMapping(value="/doLogin", method=RequestMethod.POST)
@ResponseBody
@XxlSso(login=false)
public Response<String> doLogin(HttpServletRequest request, HttpServletResponse response, String userName, String password, String ifRemember){
// 登錄驗證操作
...
// XXL-SSO 登錄
LoginInfo loginInfo = new LoginInfo(String.valueOf(xxlBootUser.getId()), UUIDTool.getSimpleUUID());
return XxlSsoHelper.loginWithCookie(loginInfo, response, ifRem);
}
注銷接口:
@RequestMapping(value="/logout", method=RequestMethod.POST)
@ResponseBody
@XxlSso(login=false)
public Response<String> logout(HttpServletRequest request, HttpServletResponse response){
// XXL-SSO 注銷
return XxlSsoHelper.logoutWithCookie(request, response);
}
第四步:XXL-SSO 接入使用 ( 集成RBAC 權限系統)
接入 XXL-SSO 之后,業務可通過 注解 or API 進行 登錄驗證、權限驗證。一行注解/代碼即可實現 登錄認證、權限認證、角色認證 等,接入靈活方便;此處以 “注解方式” + “RBAC權限” 結合方式講解(XXL-BOOT項目應用方式)。
- XXL- SSO 接入管控 (認證 & 權限校驗)
通過 “@XxlSso” 注解支持,提供“login、permission、role”等屬性,用于控制登錄認證、角色/權限認證等。
以如下接口為例,限制操作用戶:必須登錄,且擁有 “org:user” 權限。
@RequestMapping("/update")
@ResponseBody
@XxlSso(permission = "org:user")
public Response<String> update(HttpServletRequest request, HttpServletResponse response, XxlBootUserDTO xxlJobUser) {
// xxl-sso “登錄驗證 + 權限驗證”通過,獲取登錄用戶信息
Response<LoginInfo> loginInfoResponse = XxlSsoHelper.loginCheckWithCookie(request, response);
...
}
- 用戶權限動態(RBAC)控制:
XXL-BOOT內置基于RBAC權限管理能力,針對用戶擁有的角色/權限進行動態管理。

更多可參考 XXL-SSO 與 XXL-BOOT 官方文檔與Sample項目代碼示例。


浙公網安備 33010602011771號