博客 / 詳情

返回

使用XXL-SSO實現登錄認證以及權限管控

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

在這裏插入圖片描述

XXL-SSO簡介

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

  • 中文文檔:https://www.xuxueli.com/xxl-sso/
  • Github:https://github.com/xuxueli/xxl-sso

在這裏插入圖片描述

XXL-BOOT簡介

XXL-BOOT 是一個快速開發平台,易學易用、靈活擴展、開箱即用。內置安全登錄、權限管控、端到端代碼生成、響應式佈局、多語言、通告觸達……等能力。整合前後端流行技術,致力為 中小企業、個人開發者 打造開箱即用的中後台解決方案。

  • 中文文檔:https://www.xuxueli.com/xxl-boot/
  • Github:https://github.com/xuxueli/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項目代碼示例。

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.