Spring Security實戰三:說說我的認識
Spring Security的用法看了不少,就大概來總結總結,找出一套適合直接應用到專案的。
一、為什麼要用Spring Security
待補充
二、Spring Security整合中的缺點
Spring Security的主要功能是登入驗證、訪問控制。然而,由於Remember Me和訪問控制自身的缺陷,導致並不適用在實際的專案中。Remember Me的缺陷參考上篇文章:關於記住HTTP請求的狀態;訪問控制的不足,主要是因為要把許可權控制硬編碼在程式碼中。為了解決這兩個問題,考慮引入JWT+redis(JWT)和RBAC。
1.引入JWT+redis
1)講講JWT的優缺點。2)引入redis解決其重新整理的問題有兩種方式。①時時更新 ②儲存一個上次訪問時間,在JWT過期時,比較兩次時間的差值來確定,是否需要動態更新JWT。
待補充
2.引入RBAC
RBAC的引入分三步:先設計資料庫,再編寫增刪改查操作,最後將RBAC應用到Spring Security中。前兩步就省略了,直接看第三步吧,怎麼在Spring Security中使用RBAC。
首先,判斷當前使用者所擁有的URL是否和當前訪問的URL是否匹配
/**
* 返回許可權驗證的介面
*/
public interface RbacService {
boolean hasPermission(HttpServletRequest request,Authentication authentication);
}
@Component("rbacService")
public class RbacServiceImpl implements RbacService {
private AntPathMatcher antPathMatcher = new AntPathMatcher();
@Override
public boolean hasPermission(HttpServletRequest request, Authentication authentication) {
Object principal = authentication.getPrincipal();
boolean hasPermission = false;
if (principal instanceof UserDetails) { //首先判斷先當前使用者是否是我們UserDetails物件。
String userName = ((UserDetails) principal).getUsername();
Set<String> urls = new HashSet<>(); // 資料庫讀取 //讀取使用者所擁有許可權的所有URL
urls.add("/whoim");
// 注意這裡不能用equal來判斷,因為有些URL是有引數的,所以要用AntPathMatcher來比較
for (String url : urls) {
if (antPathMatcher.match(url, request.getRequestURI())) {
hasPermission = true;
break;
}
}
}
return hasPermission;
}
}
然後將此訪問控制配置在Spring Security中
@Override
protected void configure(HttpSecurity http) throws Exception {
http.formLogin() //表單登入
//.loginPage("/evolutionary-loginIn.html")
.loginPage("/logintype") //如果需要身份認證則跳轉到這裡
.loginProcessingUrl("/login")
.successHandler(evolutionaryAuthenticationHandler)
.failureHandler(evolutionaryAuthenticationFailureHandler)
.and()
.authorizeRequests()
.antMatchers("/logintype",securityProperties.getBrower().getLoginPage())//不校驗我們配置的登入頁面
.permitAll()
.anyRequest()
.access("@rbacService.hasPermission(request,authentication)") //必須經過認證以後才能訪問
.and().csrf().disable().addFilter(new JWTLoginFilter(authenticationManager()))
.addFilter(new JWTAuthenticationFilter(authenticationManager()));
}
相關文章
- 說說如何使用 Spring Security 保護 web 請求SpringWeb
- Spring security(三)---認證過程Spring
- 說說ITSM專案實戰那些事兒(三)
- 說說你對自我認識邊界的理解
- Spring Security認證器實現Spring
- 說說我為什麼看好Spring Cloud AlibabaSpringCloud
- Spring Security 實戰乾貨:使用 JWT 認證訪問介面SpringJWT
- 【Spring Security】實現多種認證方式Spring
- 面試官:實戰中用過CountDownLatch嗎?詳細說一說,我:啊這面試CountDownLatch
- 面了三十個人,說說我的真實感受
- Spring security(四)-spring boot +spring security簡訊認證+redis整合Spring BootRedis
- 說說我對 WSGI 的理解
- Spring Security 實戰乾貨:理解AuthenticationManagerSpring
- Spring Security 入門原理及實戰Spring
- 請你說說SpringSpring
- 我們說說早起
- Spring Security 實戰乾貨:圖解Spring Security中的Servlet過濾器體系Spring圖解Servlet過濾器
- Spring認證_什麼是Spring Security?Spring
- Spring Security認證提供程式Spring
- 從《全面戰爭:三國》出發,說說外國人對三國的印象
- 說說我心中的Linux系統Linux
- 說說我眼中的Vue和ReactVueReact
- 說說我眼中的IT界加班文化
- MySQL實戰 | 06/07 簡單說說MySQL中的鎖MySql
- 說說 Spring DAO 的異常體系Spring
- SpringBoot + Spring Security 學習筆記(三)實現圖片驗證碼認證Spring Boot筆記
- Spring Security OAuth2.0認證授權三:使用JWT令牌SpringOAuthJWT
- spring security許可權認證Spring
- 實戰!Spring Boot Security+JWT前後端分離架構登入認證!Spring BootJWT後端架構
- 實戰!spring Boot security+JWT 前後端分離架構認證登入!Spring BootJWT後端架構
- 說說 Spring 支援的 AspectJ 切點函式Spring函式
- 說說 Spring AOP 中 @Aspect 的高階用法Spring
- Spring Security 實戰乾貨:分散式物件SharedObjectSpring分散式物件Object
- 說說我當初是如何學Linux的Linux
- 七、Spring Boot整合Spring Security之前後分離認證最佳實現Spring Boot
- 【Java面試】說說你對Spring MVC的理解Java面試SpringMVC
- 說說在 Spring 中,如何程式設計實現事務管理Spring程式設計
- spring security 認證原始碼跟蹤Spring原始碼