@PreAuthorize如何检查角色?

时间:2017-03-06 17:41:43

标签: spring spring-security

我有几个REST API。

我想将安全放在所有这些之上,以便仅为某些角色提供功能。

我将@EnableGlobalMethodSecurity(prePostEnabled = true)放在配置类中。

我有一个带有存储角色的表的数据库。

@RequestMapping(path = "/error", method = RequestMethod.GET)
@PreAuthorize("hasRole('ROLE_ADMIN')") 
public ResponseEntity<ResponseWrapper> getError(...


INSERT INTO table USER_ROLE VALUES ('ADMIN','PASSWORD','ROLE_ADMIN');

方法“hasRole”如何查询表USER_ROLE? 是否有任何设置我必须给Spring以便与该表通信?

1 个答案:

答案 0 :(得分:2)

确保在配置中添加以下内容:

注释风格:

@EnableGlobalMethodSecurity(prePostEnabled = true)

XML样式:

<global-method-security pre-post-annotations="enabled"/>

It's all in the spring docs

使用@Pre@Post注释要求您首先在项目中设置spring security。在标准实现中的身份验证期间加载用户角色。

在检查注释时(默认情况下)它不会检查您的表,它只检查内存中的Principal(用户)对象以获取已分配的GrantedAuthority(角色)列表。

仔细看看......

查看UserDetailsService界面,返回UserDetialsPrincipal)的实例。这是我们获取您的&#34;用户&#34;来自数据库。

UserDetials接口定义了一个名为getAuthorities()的方法,该方法返回Collection<? extends GrantedAuthority>,基本上是您的Role表。这就是&#34;角色&#34;将其设为内存,稍后可以通过@Pre@Post注释进行检查。

上面我解释的实施可以找到here