我有几个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以便与该表通信?
答案 0 :(得分:2)
确保在配置中添加以下内容:
注释风格:
@EnableGlobalMethodSecurity(prePostEnabled = true)
XML样式:
<global-method-security pre-post-annotations="enabled"/>
使用@Pre
和@Post
注释要求您首先在项目中设置spring security。在标准实现中的身份验证期间加载用户角色。
在检查注释时(默认情况下)它不会检查您的表,它只检查内存中的Principal
(用户)对象以获取已分配的GrantedAuthority
(角色)列表。
仔细看看......
查看UserDetailsService界面,返回UserDetials(Principal
)的实例。这是我们获取您的&#34;用户&#34;来自数据库。
UserDetials
接口定义了一个名为getAuthorities()
的方法,该方法返回Collection<? extends GrantedAuthority>
,基本上是您的Role
表。这就是&#34;角色&#34;将其设为内存,稍后可以通过@Pre
和@Post
注释进行检查。
上面我解释的实施可以找到here。