From ce3298b9b01d83aea11bd144ccdc2e890a75cd97 Mon Sep 17 00:00:00 2001 From: RuoYi <yzz_ivy@163.com> Date: 星期三, 26 六月 2024 19:52:25 +0800 Subject: [PATCH] 升级spring-security到安全版本,防止漏洞风险 --- src/main/java/com/ruoyi/framework/config/SecurityConfig.java | 99 ++++++++++++++++++++++--------------------------- pom.xml | 1 2 files changed, 46 insertions(+), 54 deletions(-) diff --git a/pom.xml b/pom.xml index d6c9e09..fa36f4d 100644 --- a/pom.xml +++ b/pom.xml @@ -25,6 +25,7 @@ <java.version>1.8</java.version> <maven-jar-plugin.version>3.1.1</maven-jar-plugin.version> <spring-framework.version>5.3.33</spring-framework.version> + <spring-security.version>5.7.12</spring-security.version> <pagehelper.spring.boot.starter.version>1.4.7</pagehelper.spring.boot.starter.version> <fastjson.version>2.0.43</fastjson.version> <druid.version>1.2.23</druid.version> diff --git a/src/main/java/com/ruoyi/framework/config/SecurityConfig.java b/src/main/java/com/ruoyi/framework/config/SecurityConfig.java index bdb7199..b04beff 100644 --- a/src/main/java/com/ruoyi/framework/config/SecurityConfig.java +++ b/src/main/java/com/ruoyi/framework/config/SecurityConfig.java @@ -2,16 +2,17 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; import org.springframework.http.HttpMethod; import org.springframework.security.authentication.AuthenticationManager; -import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; -import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; +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.WebSecurityConfigurerAdapter; -import org.springframework.security.config.annotation.web.configurers.ExpressionUrlAuthorizationConfigurer; import org.springframework.security.config.http.SessionCreationPolicy; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.security.web.SecurityFilterChain; import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; import org.springframework.security.web.authentication.logout.LogoutFilter; import org.springframework.web.filter.CorsFilter; @@ -25,8 +26,9 @@ * * @author ruoyi */ -@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true) -public class SecurityConfig extends WebSecurityConfigurerAdapter +@EnableMethodSecurity(prePostEnabled = true, securedEnabled = true) +@Configuration +public class SecurityConfig { /** * 鑷畾涔夌敤鎴疯璇侀�昏緫 @@ -65,16 +67,15 @@ private PermitAllUrlProperties permitAllUrl; /** - * 瑙e喅 鏃犳硶鐩存帴娉ㄥ叆 AuthenticationManager - * - * @return - * @throws Exception + * 韬唤楠岃瘉瀹炵幇 */ @Bean - @Override - public AuthenticationManager authenticationManagerBean() throws Exception + public AuthenticationManager authenticationManager() { - return super.authenticationManagerBean(); + DaoAuthenticationProvider daoAuthenticationProvider = new DaoAuthenticationProvider(); + daoAuthenticationProvider.setUserDetailsService(userDetailsService); + daoAuthenticationProvider.setPasswordEncoder(bCryptPasswordEncoder()); + return new ProviderManager(daoAuthenticationProvider); } /** @@ -92,40 +93,39 @@ * rememberMe | 鍏佽閫氳繃remember-me鐧诲綍鐨勭敤鎴疯闂� * authenticated | 鐢ㄦ埛鐧诲綍鍚庡彲璁块棶 */ - @Override - protected void configure(HttpSecurity httpSecurity) throws Exception + @Bean + protected SecurityFilterChain filterChain(HttpSecurity httpSecurity) throws Exception { - // 娉ㄨВ鏍囪鍏佽鍖垮悕璁块棶鐨剈rl - ExpressionUrlAuthorizationConfigurer<HttpSecurity>.ExpressionInterceptUrlRegistry registry = httpSecurity.authorizeRequests(); - permitAllUrl.getUrls().forEach(url -> registry.antMatchers(url).permitAll()); - - httpSecurity - // CSRF绂佺敤锛屽洜涓轰笉浣跨敤session - .csrf().disable() - // 绂佺敤HTTP鍝嶅簲鏍囧ご - .headers().cacheControl().disable().and() - // 璁よ瘉澶辫触澶勭悊绫� - .exceptionHandling().authenticationEntryPoint(unauthorizedHandler).and() - // 鍩轰簬token锛屾墍浠ヤ笉闇�瑕乻ession - .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and() - // 杩囨护璇锋眰 - .authorizeRequests() + return httpSecurity + // CSRF绂佺敤锛屽洜涓轰笉浣跨敤session + .csrf(csrf -> csrf.disable()) + // 绂佺敤HTTP鍝嶅簲鏍囧ご + .headers((headersCustomizer) -> { + headersCustomizer.cacheControl(cache -> cache.disable()).frameOptions(options -> options.sameOrigin()); + }) + // 璁よ瘉澶辫触澶勭悊绫� + .exceptionHandling(exception -> exception.authenticationEntryPoint(unauthorizedHandler)) + // 鍩轰簬token锛屾墍浠ヤ笉闇�瑕乻ession + .sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS)) + // 娉ㄨВ鏍囪鍏佽鍖垮悕璁块棶鐨剈rl + .authorizeHttpRequests((requests) -> { + permitAllUrl.getUrls().forEach(url -> requests.antMatchers(url).permitAll()); // 瀵逛簬鐧诲綍login 娉ㄥ唽register 楠岃瘉鐮乧aptchaImage 鍏佽鍖垮悕璁块棶 - .antMatchers("/login", "/register", "/captchaImage").permitAll() - // 闈欐�佽祫婧愶紝鍙尶鍚嶈闂� - .antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll() - .antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll() - // 闄や笂闈㈠鐨勬墍鏈夎姹傚叏閮ㄩ渶瑕侀壌鏉冭璇� - .anyRequest().authenticated() - .and() - .headers().frameOptions().disable(); - // 娣诲姞Logout filter - httpSecurity.logout().logoutUrl("/logout").logoutSuccessHandler(logoutSuccessHandler); - // 娣诲姞JWT filter - httpSecurity.addFilterBefore(authenticationTokenFilter, UsernamePasswordAuthenticationFilter.class); - // 娣诲姞CORS filter - httpSecurity.addFilterBefore(corsFilter, JwtAuthenticationTokenFilter.class); - httpSecurity.addFilterBefore(corsFilter, LogoutFilter.class); + requests.antMatchers("/login", "/register", "/captchaImage").permitAll() + // 闈欐�佽祫婧愶紝鍙尶鍚嶈闂� + .antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll() + .antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll() + // 闄や笂闈㈠鐨勬墍鏈夎姹傚叏閮ㄩ渶瑕侀壌鏉冭璇� + .anyRequest().authenticated(); + }) + // 娣诲姞Logout filter + .logout(logout -> logout.logoutUrl("/logout").logoutSuccessHandler(logoutSuccessHandler)) + // 娣诲姞JWT filter + .addFilterBefore(authenticationTokenFilter, UsernamePasswordAuthenticationFilter.class) + // 娣诲姞CORS filter + .addFilterBefore(corsFilter, JwtAuthenticationTokenFilter.class) + .addFilterBefore(corsFilter, LogoutFilter.class) + .build(); } /** @@ -135,14 +135,5 @@ public BCryptPasswordEncoder bCryptPasswordEncoder() { return new BCryptPasswordEncoder(); - } - - /** - * 韬唤璁よ瘉鎺ュ彛 - */ - @Override - protected void configure(AuthenticationManagerBuilder auth) throws Exception - { - auth.userDetailsService(userDetailsService).passwordEncoder(bCryptPasswordEncoder()); } } -- Gitblit v1.9.3