2017-03-06 788 views
0

我有几个REST API。@PreAuthorize如何检查角色?

我想把安全放在他们所有人的头顶上,以便只允许某些角色的功能。

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

我有一个DB存储角色的表。

@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一些设置吗?

+0

基本上我想了解@PreAuthorize如何与存储多个角色的表进行通信。 – pacio14

回答

1

确保你添加以下到您的配置:

注释风格:

@EnableGlobalMethodSecurity(prePostEnabled = true) 

XML风格:

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

It's all in the spring docs

使用@Pre@Post注释需要您首先在项目中设置spring安全性。用户角色在标准实现中的认证过程中加载。

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

仔细看看...

看看在UserDetailsService接口,这将返回的UserDetials一个实例(Principal)。这是我们从数据库中获取“用户”的地方。

UserDetials接口定义了一个名为getAuthorities()的方法,该方法返回Collection<? extends GrantedAuthority>,实际上是您的Role表。这是“角色”将其记录到内存中的位置,稍后可通过@Pre@Post注释进行检查。

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

+0

我把注释放在配置文件中.. 我不明白角色是用户的参数,请求的参数,还是我必须设置一些东西来安排“hasrole”方法和表格... – pacio14

+0

您必须设置类似于我现在在答案中解释的内容。 – dkanejs