我正在研究一些有关弹簧安全性的代码。我想了解我在互联网上找到的这个例子 1 :
teamMembers
:
Array(3)
0
:
{memberId: 4564, role: "", deleted: false, signatory: false, signatoryOrder: null, …}
1
:
{memberId: 4565, role: "", deleted: false, signatory: false, signatoryOrder: null, …}
2
:
{memberId: 4566, role: "", deleted: false, signatory: false, signatoryOrder: null, …}
:
current
:
false
deleted
:
false
enabled
:
1
memberId
:
4564
reportId
:
2936
reviewer
:
false
role
:
""
signatory
:
false
signatoryOrder
:
null
userProfile
:
contractor
:
false
email
:
"koryjcampbell@gmail.com"
firstName
:
"Kory"
id
:
null
lastName
:
"Campbell"
title
:
"Software Developer"
userAccountExists
:
false
userId
:
247
username
:
"koryjcampbell@gmail.com"
vm.teamGridOptions = {
enableGridMenu: false,
enableSorting: true,
enableHorizontalScrollbar: 0, /*always hide horizontal scroll bar*/
enableVerticalScrollbar: 1, /*always show vertical scroll bar*/
rowHeight: 46,
columnDefs: [
{
enableHiding: false,
enableColumnMenu: false,
displayName: 'First Name',
field: 'firstName',
cellClass: 'ui-grid-cell-contents',
cellTemplate: '<span>{{row.entity.teamMembers.userProfile.firstName}}</span>'
},
}
我无法理解此配置,为什么需要此代码:
http.requestMatchers()
.antMatchers("/management/**") // (1)
.and()
.authorizeRequests() // (2)
.antMatchers("/management/health")
.permitAll()
.antMatchers("/management/info")
.permitAll()
.antMatchers("/management/**")
.hasRole("ACTUATOR")
.anyRequest().permitAll()
.and()
.httpBasic(); (3)
在.authorizeRequests()之前吗? (1)
那是什么意思?
你能解释这个例子吗?
2 :第二种情况是什么?
http.requestMatchers()
.antMatchers("/management/**")
.and()
使用requestMatchers()有什么影响?
如果我向“ / rest / v1 / test / hello2”发送请求,我会收到401为什么为什么拒绝请求的规则与antMatchers(“ / rest2 / **”)不匹配?
答案 0 :(得分:1)
requestMatchers()
的目的是指定将对spring安全配置应用哪些请求。
例如,如果您有两个端点"/public"
和"/private"
,而您只想将安全性(特别是csrf保护)应用于"/private"
,则可以添加以下配置:
http
.requestMatchers()
.antMatchers("/private/**")
.and()
.csrf();
然后,如果您发布到"/private"
,则会收到403响应。
但是,如果您发布到"/public"
,则会得到200,因为没有应用安全性。
这与authorizeRequests
分开,后者指示该端点所需的访问权限的类型,与是否完全应用安全性相反。
在您提到的示例1中
http
.requestMatchers()
.antMatchers("/management/**")
.and()
...
该安全配置仅应用于"/management/**"
,因此,如果您向"/foo"
发出请求,则该安全配置将不受保护。
在您提到的示例2中,
http
.requestMatchers()
.antMatchers("/rest2/**")
.and()
.authorizeRequests()
.antMatchers("/rest/v1/test/hello").permitAll()
.antMatchers("/rest/v1/test/**").denyAll()
.and()
.requestMatchers()
.antMatchers("/rest/**")
.and()
.authorizeRequests()
.antMatchers("/rest/v1/test/hello").permitAll();
"/rest/v1/test/hello2"
响应为401的原因是因为"/rest/**"
在请求匹配器中,因此您的安全规则.antMatchers("/rest/v1/test/hello").permitAll()
将适用。
如果您要向"/rest3/v1/test/hello2"
发送请求,则它将以200响应,因为"/rest3/**"
不属于任何请求匹配器。
答案 1 :(得分:0)
Spring安全性API: 公共最终类HttpSecurity.RequestMatcherConfigurer 扩展AbstractRequestMatcherRegistry
允许映射此HttpSecurity将用于的HTTP请求