Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
C
cocktail-party-server
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
cocktail-party
cocktail-party-server
Commits
10f68b97
提交
10f68b97
authored
6月 26, 2024
作者:
RuoYi
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
升级spring-security到安全版本,防止漏洞风险
上级
8eff83e2
显示空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
44 行增加
和
43 行删除
+44
-43
pom.xml
pom.xml
+10
-0
SecurityConfig.java
.../main/java/com/ruoyi/framework/config/SecurityConfig.java
+34
-43
没有找到文件。
pom.xml
浏览文件 @
10f68b97
...
@@ -19,6 +19,7 @@
...
@@ -19,6 +19,7 @@
<java.version>
1.8
</java.version>
<java.version>
1.8
</java.version>
<maven-jar-plugin.version>
3.1.1
</maven-jar-plugin.version>
<maven-jar-plugin.version>
3.1.1
</maven-jar-plugin.version>
<spring-framework.version>
5.3.33
</spring-framework.version>
<spring-framework.version>
5.3.33
</spring-framework.version>
<spring-security.version>
5.7.12
</spring-security.version>
<druid.version>
1.2.23
</druid.version>
<druid.version>
1.2.23
</druid.version>
<bitwalker.version>
1.21
</bitwalker.version>
<bitwalker.version>
1.21
</bitwalker.version>
<swagger.version>
3.0.0
</swagger.version>
<swagger.version>
3.0.0
</swagger.version>
...
@@ -45,6 +46,15 @@
...
@@ -45,6 +46,15 @@
<scope>
import
</scope>
<scope>
import
</scope>
</dependency>
</dependency>
<!-- SpringSecurity的依赖配置-->
<dependency>
<groupId>
org.springframework.security
</groupId>
<artifactId>
spring-security-bom
</artifactId>
<version>
${spring-security.version}
</version>
<type>
pom
</type>
<scope>
import
</scope>
</dependency>
<!-- SpringBoot的依赖配置-->
<!-- SpringBoot的依赖配置-->
<dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<groupId>
org.springframework.boot
</groupId>
...
...
ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java
浏览文件 @
10f68b97
...
@@ -2,16 +2,17 @@ package com.ruoyi.framework.config;
...
@@ -2,16 +2,17 @@ package com.ruoyi.framework.config;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.http.HttpMethod
;
import
org.springframework.http.HttpMethod
;
import
org.springframework.security.authentication.AuthenticationManager
;
import
org.springframework.security.authentication.AuthenticationManager
;
import
org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder
;
import
org.springframework.security.authentication.ProviderManager
;
import
org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity
;
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.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.config.http.SessionCreationPolicy
;
import
org.springframework.security.core.userdetails.UserDetailsService
;
import
org.springframework.security.core.userdetails.UserDetailsService
;
import
org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder
;
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.UsernamePasswordAuthenticationFilter
;
import
org.springframework.security.web.authentication.logout.LogoutFilter
;
import
org.springframework.security.web.authentication.logout.LogoutFilter
;
import
org.springframework.web.filter.CorsFilter
;
import
org.springframework.web.filter.CorsFilter
;
...
@@ -25,8 +26,9 @@ import com.ruoyi.framework.security.handle.LogoutSuccessHandlerImpl;
...
@@ -25,8 +26,9 @@ import com.ruoyi.framework.security.handle.LogoutSuccessHandlerImpl;
*
*
* @author ruoyi
* @author ruoyi
*/
*/
@EnableGlobalMethodSecurity
(
prePostEnabled
=
true
,
securedEnabled
=
true
)
@EnableMethodSecurity
(
prePostEnabled
=
true
,
securedEnabled
=
true
)
public
class
SecurityConfig
extends
WebSecurityConfigurerAdapter
@Configuration
public
class
SecurityConfig
{
{
/**
/**
* 自定义用户认证逻辑
* 自定义用户认证逻辑
...
@@ -65,16 +67,15 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
...
@@ -65,16 +67,15 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
private
PermitAllUrlProperties
permitAllUrl
;
private
PermitAllUrlProperties
permitAllUrl
;
/**
/**
* 解决 无法直接注入 AuthenticationManager
* 身份验证实现
*
* @return
* @throws Exception
*/
*/
@Bean
@Bean
@Override
public
AuthenticationManager
authenticationManager
()
public
AuthenticationManager
authenticationManagerBean
()
throws
Exception
{
{
return
super
.
authenticationManagerBean
();
DaoAuthenticationProvider
daoAuthenticationProvider
=
new
DaoAuthenticationProvider
();
daoAuthenticationProvider
.
setUserDetailsService
(
userDetailsService
);
daoAuthenticationProvider
.
setPasswordEncoder
(
bCryptPasswordEncoder
());
return
new
ProviderManager
(
daoAuthenticationProvider
);
}
}
/**
/**
...
@@ -92,40 +93,39 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
...
@@ -92,40 +93,39 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
* rememberMe | 允许通过remember-me登录的用户访问
* rememberMe | 允许通过remember-me登录的用户访问
* authenticated | 用户登录后可访问
* authenticated | 用户登录后可访问
*/
*/
@
Override
@
Bean
protected
void
configure
(
HttpSecurity
httpSecurity
)
throws
Exception
protected
SecurityFilterChain
filterChain
(
HttpSecurity
httpSecurity
)
throws
Exception
{
{
// 注解标记允许匿名访问的url
return
httpSecurity
ExpressionUrlAuthorizationConfigurer
<
HttpSecurity
>.
ExpressionInterceptUrlRegistry
registry
=
httpSecurity
.
authorizeRequests
();
permitAllUrl
.
getUrls
().
forEach
(
url
->
registry
.
antMatchers
(
url
).
permitAll
());
httpSecurity
// CSRF禁用,因为不使用session
// CSRF禁用,因为不使用session
.
csrf
().
disable
(
)
.
csrf
(
csrf
->
csrf
.
disable
()
)
// 禁用HTTP响应标头
// 禁用HTTP响应标头
.
headers
().
cacheControl
().
disable
().
and
()
.
headers
((
headersCustomizer
)
->
{
headersCustomizer
.
cacheControl
(
cache
->
cache
.
disable
()).
frameOptions
(
options
->
options
.
sameOrigin
());
})
// 认证失败处理类
// 认证失败处理类
.
exceptionHandling
().
authenticationEntryPoint
(
unauthorizedHandler
).
and
(
)
.
exceptionHandling
(
exception
->
exception
.
authenticationEntryPoint
(
unauthorizedHandler
)
)
// 基于token,所以不需要session
// 基于token,所以不需要session
.
sessionManagement
().
sessionCreationPolicy
(
SessionCreationPolicy
.
STATELESS
).
and
()
.
sessionManagement
(
session
->
session
.
sessionCreationPolicy
(
SessionCreationPolicy
.
STATELESS
))
// 过滤请求
// 注解标记允许匿名访问的url
.
authorizeRequests
()
.
authorizeHttpRequests
((
requests
)
->
{
permitAllUrl
.
getUrls
().
forEach
(
url
->
requests
.
antMatchers
(
url
).
permitAll
());
// 对于登录login 注册register 验证码captchaImage 允许匿名访问
// 对于登录login 注册register 验证码captchaImage 允许匿名访问
.
antMatchers
(
"/login"
,
"/register"
,
"/captchaImage"
).
permitAll
()
requests
.
antMatchers
(
"/login"
,
"/register"
,
"/captchaImage"
).
permitAll
()
// 静态资源,可匿名访问
// 静态资源,可匿名访问
.
antMatchers
(
HttpMethod
.
GET
,
"/"
,
"/*.html"
,
"/**/*.html"
,
"/**/*.css"
,
"/**/*.js"
,
"/profile/**"
).
permitAll
()
.
antMatchers
(
HttpMethod
.
GET
,
"/"
,
"/*.html"
,
"/**/*.html"
,
"/**/*.css"
,
"/**/*.js"
,
"/profile/**"
).
permitAll
()
.
antMatchers
(
"/swagger-ui.html"
,
"/swagger-resources/**"
,
"/webjars/**"
,
"/*/api-docs"
,
"/druid/**"
).
permitAll
()
.
antMatchers
(
"/swagger-ui.html"
,
"/swagger-resources/**"
,
"/webjars/**"
,
"/*/api-docs"
,
"/druid/**"
).
permitAll
()
// 除上面外的所有请求全部需要鉴权认证
// 除上面外的所有请求全部需要鉴权认证
.
anyRequest
().
authenticated
()
.
anyRequest
().
authenticated
();
.
and
()
})
.
headers
().
frameOptions
().
disable
();
// 添加Logout filter
// 添加Logout filter
httpSecurity
.
logout
().
logoutUrl
(
"/logout"
).
logoutSuccessHandler
(
logoutSuccessHandler
);
.
logout
(
logout
->
logout
.
logoutUrl
(
"/logout"
).
logoutSuccessHandler
(
logoutSuccessHandler
))
// 添加JWT filter
// 添加JWT filter
httpSecurity
.
addFilterBefore
(
authenticationTokenFilter
,
UsernamePasswordAuthenticationFilter
.
class
);
.
addFilterBefore
(
authenticationTokenFilter
,
UsernamePasswordAuthenticationFilter
.
class
)
// 添加CORS filter
// 添加CORS filter
httpSecurity
.
addFilterBefore
(
corsFilter
,
JwtAuthenticationTokenFilter
.
class
);
.
addFilterBefore
(
corsFilter
,
JwtAuthenticationTokenFilter
.
class
)
httpSecurity
.
addFilterBefore
(
corsFilter
,
LogoutFilter
.
class
);
.
addFilterBefore
(
corsFilter
,
LogoutFilter
.
class
)
.
build
();
}
}
/**
/**
...
@@ -136,13 +136,4 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
...
@@ -136,13 +136,4 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
{
{
return
new
BCryptPasswordEncoder
();
return
new
BCryptPasswordEncoder
();
}
}
/**
* 身份认证接口
*/
@Override
protected
void
configure
(
AuthenticationManagerBuilder
auth
)
throws
Exception
{
auth
.
userDetailsService
(
userDetailsService
).
passwordEncoder
(
bCryptPasswordEncoder
());
}
}
}
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论