springsecurity5.7.x和springsecurity6.x配置文件對比

springsecurity5和springsecurity6如何要實現多種登錄方式,自定義登錄方式都是一樣的操作步驟,主要有四個步驟。

一、自定義登錄用戶實體實現springsecurity中的UserDetails接口

二、自定義登錄用戶實現類實現springsecurity中的UserDetailsService接口

三、自定義登錄用戶authentic驗證器繼承springsecurity中的AbstractAuthenticationToken抽象類

四、自定義登錄用戶provider驗證管理器實現springsecurity中的AuthenticationProvider接口

一、springsecurity5.7.x配置

package com.school.information.config;import com.school.information.core.security.filter.JwtAuthenticationTokenFilter;
import com.school.information.core.security.handler.AccessDeniedHandlerImpl;
import com.school.information.core.security.handler.AuthenticationEntryPointImpl;
import com.school.information.core.security.provider.WechatAppUserAuthenticationProvider;
import com.school.information.core.service.CustomPasswordService;
import com.school.information.core.service.SecurityUserServiceImpl;
import com.school.information.core.service.WechatAppUserServiceImpl;
import org.springframework.context.annotation.Bean;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.ProviderManager;
import org.springframework.security.authentication.dao.DaoAuthenticationProvider;
import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityCustomizer;
import org.springframework.security.config.http.SessionCreationPolicy;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.web.SecurityFilterChain;
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
import org.springframework.security.web.util.matcher.RequestMatcher;import javax.annotation.Resource;
import java.util.Arrays;/** SecuritConfig配置類*/
@EnableWebSecurity
@EnableMethodSecurity // 開啟注解授權功能
public class SecurityConfig {@Resourceprivate JwtAuthenticationTokenFilter jwtAuthenticationTokenFilter;@Resourceprivate SecurityUserServiceImpl userDetailsService;@Resourceprivate WechatAppUserServiceImpl wechatAppUserService;/*** 認證失敗處理器*/@Resourceprivate AuthenticationEntryPointImpl authenticationEntryPoint;@Resourceprivate AccessDeniedHandlerImpl accessDeniedHandler;@Resourceprivate RequestMatcher[] requestMatchers;@Beanpublic SecurityFilterChain filterChain(HttpSecurity http) throws Exception {http// 關閉csrf  因為不使用session.csrf().disable()// 禁用HTTP響應標頭.headers().frameOptions().disable().and()//不通過Session獲取SecurityContext 基于token,所以不需要session.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()// 過濾請求.authorizeHttpRequests(authorize -> authorize.requestMatchers(requestMatchers).permitAll().anyRequest().authenticated());//對于登錄login 注冊register 驗證碼captchaImage 無需攔截 直接訪問
//                .antMatchers("/", "/token/captcha").permitAll()
//                // 靜態資源,可匿名訪問
//                .antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll()
//                .antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll()//  除上面外的所有請求全部需要鑒權認證
//                .anyRequest().authenticated();// 添加JWT filterhttp.addFilterBefore(jwtAuthenticationTokenFilter, UsernamePasswordAuthenticationFilter.class);//  認證失敗處理類http.exceptionHandling().authenticationEntryPoint(authenticationEntryPoint).accessDeniedHandler(accessDeniedHandler);// SpringSecurity設置允許跨域http.cors().disable();return http.build();}/*** 靜態文件放行*/@Beanpublic WebSecurityCustomizer webSecurityCustomizer() {return (web) -> web.ignoring().antMatchers("/staic/**", "/web/**");}@Beanpublic PasswordEncoder passwordEncoder() {return new CustomPasswordService();}/*** 設置默認認證提供 用戶名密碼登錄*/@Beanpublic DaoAuthenticationProvider daoAuthenticationProvider() {final DaoAuthenticationProvider authenticationProvider = new DaoAuthenticationProvider();authenticationProvider.setUserDetailsService(userDetailsService);authenticationProvider.setPasswordEncoder(passwordEncoder());return authenticationProvider;}/*** 設置小程序的登錄驗證方式 openid驗證登錄 沒有密碼** @return*/@Beanpublic WechatAppUserAuthenticationProvider daoWechatAppUserAuthenticationProvider() {final WechatAppUserAuthenticationProvider wechatAppUserAuthenticationProvider = new WechatAppUserAuthenticationProvider();wechatAppUserAuthenticationProvider.setUserDetailsService(wechatAppUserService);return wechatAppUserAuthenticationProvider;}// 獲取AuthenticationManager(認證管理器),登錄時認證使用。 默認UsernamePasswordAuthenticationToken
//    @Bean
//    public AuthenticationManager authenticationManager(AuthenticationConfiguration authenticationConfiguration) throws Exception {
//        return authenticationConfiguration.getAuthenticationManager();
//    }/*** 對于默認的認證管理器 UsernamePasswordAuthenticationToken 直接使用上方的注釋掉的代碼即可* 如果項目中需要多個不同的認證管理器,需要使用下方的代碼,將不同的認證管理器交由providerManager去管理** @return* @throws Exception*/@Beanpublic AuthenticationManager authenticationManager() throws Exception {ProviderManager authenticationManager = new ProviderManager(Arrays.asList(daoAuthenticationProvider(), daoWechatAppUserAuthenticationProvider()));return authenticationManager;}}

二、springsecurity6.x配置文件

package com.school.information.config;import com.school.information.core.security.filter.JwtAuthenticationTokenFilter;
import com.school.information.core.security.handler.AccessDeniedHandlerImpl;
import com.school.information.core.security.handler.AuthenticationEntryPointImpl;
import com.school.information.core.security.provider.WechatAppUserAuthenticationProvider;
import com.school.information.core.service.CustomPasswordService;
import com.school.information.core.service.SecurityUserServiceImpl;
import com.school.information.core.service.WechatAppUserServiceImpl;
import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.ProviderManager;
import org.springframework.security.authentication.dao.DaoAuthenticationProvider;
import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityCustomizer;
import org.springframework.security.config.http.SessionCreationPolicy;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.web.SecurityFilterChain;
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
import org.springframework.security.web.util.matcher.RequestMatcher;import java.util.Arrays;/** SecuritConfig配置類*/
@Configuration
@EnableWebSecurity
@EnableMethodSecurity // 開啟注解授權功能
@RequiredArgsConstructor
public class SecurityConfig {private final JwtAuthenticationTokenFilter jwtAuthenticationTokenFilter;private final SecurityUserServiceImpl userDetailsService;private final WechatAppUserServiceImpl wechatAppUserService;/*** 認證失敗處理器*/private final AuthenticationEntryPointImpl authenticationEntryPoint;private final AccessDeniedHandlerImpl accessDeniedHandler;private final RequestMatcher[] requestMatchers;@Beanpublic SecurityFilterChain filterChain(HttpSecurity http) throws Exception {// 關閉csrf  因為不使用sessionhttp.csrf(csrf -> csrf.disable());// 禁用HTTP響應標頭http.headers(headers -> headers.frameOptions(frameOptionsConfig -> frameOptionsConfig.disable()));//不通過Session獲取SecurityContext 基于token,所以不需要sessionhttp.sessionManagement(sessionManagement -> sessionManagement.sessionCreationPolicy(SessionCreationPolicy.STATELESS));// 過濾請求http.authorizeHttpRequests(authorize -> authorize.requestMatchers(requestMatchers).permitAll().anyRequest().authenticated());//對于登錄login 注冊register 驗證碼captchaImage 無需攔截 直接訪問
//                .antMatchers("/", "/token/captcha").permitAll()
//                // 靜態資源,可匿名訪問
//                .antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll()
//                .antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll()//  除上面外的所有請求全部需要鑒權認證
//                .anyRequest().authenticated();// 添加JWT filterhttp.addFilterBefore(jwtAuthenticationTokenFilter, UsernamePasswordAuthenticationFilter.class);//  認證失敗處理類http.exceptionHandling(exceptionHandlingConfigurer -> exceptionHandlingConfigurer.authenticationEntryPoint(authenticationEntryPoint).accessDeniedHandler(accessDeniedHandler));// SpringSecurity設置允許跨域http.cors(cors -> cors.disable());return http.build();}/*** 靜態文件放行*/@Beanpublic WebSecurityCustomizer webSecurityCustomizer() {return (web) -> web.ignoring().requestMatchers("/staic/**", "/web/**");}@Beanpublic PasswordEncoder passwordEncoder() {return new CustomPasswordService();}/*** 設置默認認證提供 用戶名密碼登錄*/@Beanpublic DaoAuthenticationProvider daoAuthenticationProvider() {final DaoAuthenticationProvider authenticationProvider = new DaoAuthenticationProvider();authenticationProvider.setUserDetailsService(userDetailsService);authenticationProvider.setPasswordEncoder(passwordEncoder());return authenticationProvider;}/*** 設置小程序的登錄驗證方式 openid驗證登錄 沒有密碼** @return*/@Beanpublic WechatAppUserAuthenticationProvider daoWechatAppUserAuthenticationProvider() {final WechatAppUserAuthenticationProvider wechatAppUserAuthenticationProvider = new WechatAppUserAuthenticationProvider();wechatAppUserAuthenticationProvider.setUserDetailsService(wechatAppUserService);return wechatAppUserAuthenticationProvider;}// 獲取AuthenticationManager(認證管理器),登錄時認證使用。 默認UsernamePasswordAuthenticationToken
//    @Bean
//    public AuthenticationManager authenticationManager(AuthenticationConfiguration authenticationConfiguration) throws Exception {
//        return authenticationConfiguration.getAuthenticationManager();
//    }/*** 如果項目中需要多個不同的認證管理器,需要使用下方的代碼,將不同的認證管理器交由providerManager去管理** @return* @throws Exception*/@Beanpublic AuthenticationManager authenticationManager() throws Exception {ProviderManager authenticationManager = new ProviderManager(Arrays.asList(daoAuthenticationProvider(), daoWechatAppUserAuthenticationProvider()));return authenticationManager;}}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/168203.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/168203.shtml
英文地址,請注明出處:http://en.pswp.cn/news/168203.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

vivado產生報告閱讀分析20-QOR

Report QoR Suggestions report_qor_suggestions 命令是處理 QoR 建議對象時使用的主要命令。 QoR 建議對象會創建命令和屬性來改善設計的時序性能( 欲知詳情 , 請參閱 QoR 建議 ) 。 report_qor_suggestions 命令可執行兩項任務 &am…

代碼隨想錄-刷題第七天

454. 四數相加II 題目鏈接:454. 四數相加II 思路:哈希法。使用map集合,key存放ab的值,value存放ab出現的次數。使用兩層循環,循環前兩個數組,找出ab,對map賦值。再用兩層循環,遍歷…

唯創知音WT2605C-A001音頻藍牙語音芯片:小巧體積,高品質音頻播放的創新

在現今的科技繁榮時代,音頻技術作為人類感知世界的重要方式,已經變得越來越重要。唯創知音WT2605C-A001音頻藍牙語音芯片,以其卓越的特性和創新性,正在為音頻技術領域帶來一場革命。 首先,這款芯片以其極小的體積—僅…

chatGPT4機器學習數據后最終保留在機器里的是什么? 機器是怎么產生智能的? TensorFlow沒有直接開發出類似GPT-4這樣的模型

機器學習數據后最終保留在機器里的是機器學習模型。機器學習模型是機器學習系統中的核心,它是機器學習系統能夠進行推理和預測的基礎。 機器學習模型通常由參數組成。參數是機器學習模型的權重和偏差。機器學習系統通過訓練來學習這些參數。訓練是指讓機器學習系統…

webpack 打包優化

在vue.config.js中配置 下載 uglifyjs-webpack-plugin 包 const { defineConfig } require("vue/cli-service"); var path require("path");module.exports defineConfig({transpileDependencies: true,filenameHashing: false, // 去除Vue打包后.cs…

0003Java程序設計-ssm基于微信小程序的家教信息管理系統

文章目錄 摘要目 錄系統實現開發環境 編程技術交流、源碼分享、模板分享、網課分享 企鵝🐧裙:776871563 摘要 本文講述了基于微信小程序的家教信息管理系統的設計與實現。結合線上管理的特點,分析了家教信息管理系統的現狀,給出…

外匯天眼:香港監管機構對AMTD Global Markets Limited啟動法律訴訟

香港證監會(SFC)已經啟動了法律程序,要求首次審裁法院調查AMTD Global Markets Limited(AMTD,目前以orientiert XYZ Securities Limited為名)及其前高管在與首次公開發行(IPO)相關的…

【經典小練習】修改文件中的數據

文章目錄 🌹例子🌺思路🛸方法一?報錯解決 🛸方法二 🌹例子 文本文件中有下面的數據 2-1-9-4-7-8 將文件中的數據進行排序,變成下面的數據 1-2-4-7-8-9 🌺思路 要對這些數據進行排序&#xf…

智慧樓宇可視化視頻綜合管理系統,助力樓宇高效安全運行

隨著互聯網技術的進步和發展,智能化的樓宇建設也逐步成為人們選擇辦公場所是否方便的一個重要衡量因素。在智能化樓宇中,安全管理也是重要的一個模塊。得益于互聯網新興技術的進步,安防視頻監控技術也得到了快速發展并應用在樓宇的安全管理中…

Python武器庫開發-前端篇之html概述(二十八)

前端篇之html概述(二十八) html概述 HTML5是構建Web內容的一種語言描述方式。HTML5是互聯網的下一代標準,是構建以及呈現互聯網內容的一種語言方式.被認為是互聯網的核心技術之一。HTML產生于1990年,1997年HTML4成為互聯網標準,…

虹科Pico汽車示波器 | 汽車免拆檢修 | 2011款瑞麒M1車發動機起動困難、加速無力

一、故障現象 一輛2011款瑞麒M1車,搭載SQR317F發動機,累計行駛里程約為10.4萬km。該車因發動機起動困難、抖動、動力不足、熱機易熄火等故障進廠維修。用故障檢測儀檢測,發動機控制單元(ECU)中存儲有故障代碼“P0340相…

【Python 訓練營】N_2 打印乘法口訣表

題目 借助格式化輸出長方形、左上三角形、右上三角形、左下三角形、右下三角形5種格式的九九乘法口訣表。 答案 長方形格式 for i in range(1,10):for j in range(1,10):print(%d*%d%2d%(i,j,i*j),end ) # %2d 整數站兩個字節print()左上三角形 for i in range(1,10):for …

Vue框架學習筆記——事件處理

文章目錄 前文提要事件處理的解析過程樣例代碼如下:效果展示圖片:v-on:click"響應函數"v-on:click簡寫形式響應函數添加響應函數傳參占位符"$event"注意事項 前文提要 本人僅做個人學習記錄,如有錯誤,請多包…

2、git進階操作

2、git進階操作 2.1.1 分支的創建 命令參數含義git branch (git checkout -b)<new_branch> <old_branch>表示創建分支-d <-D>刪除分支 –d如果分支沒有合并&#xff0c;git會提醒&#xff0c;-D強制刪除-a -v查看分支-m重新命名分支commit id從指定的commi…

如何打造“面向體驗”的音視頻能力——對話火山引擎王悅

編者按&#xff1a;隨著全行業視頻化的演進&#xff0c;我們置身于一個充滿創新與變革的時代。在這個數字化的浪潮中&#xff0c;視頻已經不再只是傳遞信息的媒介&#xff0c;更是重塑了我們的交互方式和體驗感知。作為字節跳動的“能力溢出”&#xff0c;火山引擎正在飛速奔跑…

【React】路徑別名配置

路徑解析配置&#xff08;webpack&#xff09;&#xff0c;把 / 解析為 src/路徑聯想配置&#xff08;VsCode&#xff09;&#xff0c;VSCode 在輸入 / 時&#xff0c;自動聯想出來對應的 src/下的子級目錄 1. 路徑解析配置 安裝craco npm i -D craco/craco項目根目錄下創建配…

RK3588平臺 USB框架與USB識別流程

一.USB的基本概念 在最初的標準里&#xff0c;USB接頭有4條線&#xff1a;電源&#xff0c;D-,D,地線。我們暫且把這樣的叫做標準的USB接頭吧。后來OTG出現了&#xff0c;又增加了miniUSB接頭。而miniUSB接頭則有5條線&#xff0c;多了一條ID線,用來標識身份用的。 熱插拔&am…

9. Mysql 模糊查詢和正則表達式

一、模糊查詢 1.1 LIKE運算符 在MySQL中&#xff0c;可以使用LIKE運算符進行模糊查詢。LIKE運算符用于匹配字符串模式&#xff0c;其中可以使用通配符來表示任意字符或字符序列。 示例代碼 SELECT * FROM table_name WHERE column_name LIKE pattern;table_name&#xff1a…

最新AIGC創作系統ChatGPT網站源碼,Midjourney繪畫系統,支持GPT-4圖片對話能力(上傳圖片并識圖理解對話),支持DALL-E3文生圖

一、AI創作系統 SparkAi創作系統是基于OpenAI很火的ChatGPT進行開發的Ai智能問答系統和Midjourney繪畫系統&#xff0c;支持OpenAI-GPT全模型國內AI全模型。本期針對源碼系統整體測試下來非常完美&#xff0c;可以說SparkAi是目前國內一款的ChatGPT對接OpenAI軟件系統。那么如…

2023亞太杯數學建模B題完整原創論文講解

大家好呀&#xff0c;從發布賽題一直到現在&#xff0c;總算完成了2023亞太地區數學建模競賽B題玻璃溫室的微氣候調控完整的成品論文。 本論文可以保證原創&#xff0c;保證高質量。絕不是隨便引用一大堆模型和代碼復制粘貼進來完全沒有應用糊弄人的垃圾半成品論文。 論文共6…