@PreAuthorize 和 intercept-url 优先级
@PreAuthorize and intercept-url priority
我有
<security:http use-expressions="true">
<security:intercept-url pattern="/**/*" access="hasRole('ROLE_USER')"/>
在 Spring 安全上下文配置文件和
@PreAuthorize("permitAll")
@RequestMapping("/public")
public String aMethod() {
// ...
}
在控制器中。
我想要的是除了 public
之外的所有 URL 都需要身份验证。这可能吗?
<intercept-url>
in XML 优先于注释。 <intercept-url>
在 URL 级别工作,在方法级别进行注释。
如果您打算使用 spring security
和 spring
<form-login />
那么下面的方法会更好。
<intercept-url pattern="/public/**"
access="permitAll" />
<intercept-url pattern="/restricted/**"
access="hasAnyRole('ROLE_USER', 'ROLE_ADMIN', 'ROLE_SOME')
@PreAuthorize("hasAnyRole('ROLE_ADMIN', 'ROLE_SOME')")
@RequestMapping("/restricted/aMethod")
public String aMethod() {
// ...
}
restricted
下的任何内容都可以由三个不同的角色访问。但是特定路径 restricted/aMethod
可以被 @PreAuthorize("ROLE_ADMIN")
和 @PreAuthorize("ROLE_SOME")
访问,但不能被 @PreAuthorize("ROLE_USER")
访问。默认情况下,所有三个角色都可以访问,但是当您使用 @PreAuthorize("ROLE_ADMIN")
标记某些路径时,使用 ROLE_ADMIN
的用户可以访问该路径。
如果您考虑一下,@PreAuthorize("hasAnyRole('ROLE_ADMIN', 'ROLE_SOME')")
充当从一大组 ROLES
到单个(或一组角色)ROLE
.[=30= 的缩小或过滤访问]
如您所见,/restricted
条路径中的 none 条可由 permitAll
访问。最好有 /static/*.css
和其他 permitAll
.
HTH
我有
<security:http use-expressions="true">
<security:intercept-url pattern="/**/*" access="hasRole('ROLE_USER')"/>
在 Spring 安全上下文配置文件和
@PreAuthorize("permitAll")
@RequestMapping("/public")
public String aMethod() {
// ...
}
在控制器中。
我想要的是除了 public
之外的所有 URL 都需要身份验证。这可能吗?
<intercept-url>
in XML 优先于注释。 <intercept-url>
在 URL 级别工作,在方法级别进行注释。
如果您打算使用 spring security
和 spring
<form-login />
那么下面的方法会更好。
<intercept-url pattern="/public/**"
access="permitAll" />
<intercept-url pattern="/restricted/**"
access="hasAnyRole('ROLE_USER', 'ROLE_ADMIN', 'ROLE_SOME')
@PreAuthorize("hasAnyRole('ROLE_ADMIN', 'ROLE_SOME')")
@RequestMapping("/restricted/aMethod")
public String aMethod() {
// ...
}
restricted
下的任何内容都可以由三个不同的角色访问。但是特定路径 restricted/aMethod
可以被 @PreAuthorize("ROLE_ADMIN")
和 @PreAuthorize("ROLE_SOME")
访问,但不能被 @PreAuthorize("ROLE_USER")
访问。默认情况下,所有三个角色都可以访问,但是当您使用 @PreAuthorize("ROLE_ADMIN")
标记某些路径时,使用 ROLE_ADMIN
的用户可以访问该路径。
如果您考虑一下,@PreAuthorize("hasAnyRole('ROLE_ADMIN', 'ROLE_SOME')")
充当从一大组 ROLES
到单个(或一组角色)ROLE
.[=30= 的缩小或过滤访问]
如您所见,/restricted
条路径中的 none 条可由 permitAll
访问。最好有 /static/*.css
和其他 permitAll
.
HTH