gpt4 book ai didi

java - 我什么时候应该在 ROLE_ 前面加上 Spring Security?

转载 作者:行者123 更新时间:2023-11-30 06:07:10 25 4
gpt4 key购买 nike

在Spring Security中,什么时候加"ROLE_"前缀比较合适?在使用 @PreAuthorize("hasRole('ROLE_USER')") 的示例中,确实如此。但在这个例子中,它没有:

http
.httpBasic()
.and()
.authorizeRequests()
.antMatchers(HttpMethod.POST, "/books").hasRole("ADMIN")

接下来呢?

SecurityContext securityContext = new SecurityContextImpl();
final Properties users = new Properties();
users.put("joe","secret,ADMIN,enabled"); <-- here
InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager(users);

Collection<GrantedAuthority> grantedAuthorities = new ArrayList<GrantedAuthority>();
grantedAuthorities.add(new SimpleGrantedAuthority("ROLE_ADMIN")); <-- here
AnonymousAuthenticationToken anonymousAuthenticationToken = new AnonymousAuthenticationToken("test", manager.loadUserByUsername("joe"), grantedAuthorities);
securityContext.setAuthentication(anonymousAuthenticationToken);
SecurityContextHolder.setContext(securityContext);

有没有具体的使用规则?

最佳答案

自动ROLE_前缀

作为Spring Security 3.x to 4.x migration guide状态:

Spring Security 4 automatically prefixes any role with ROLE_. The changes were made as part of SEC-2758

话虽如此,以下注释中的 ROLE_ 前缀是多余的:

@PreAuthorize("hasRole('ROLE_USER')")

由于您正在调用 hasRole 方法,因此暗示您正在传递一个角色。以下表达式也是如此:

antMatchers(HttpMethod.POST, "/books").hasRole("ADMIN")

但是对于:

new SimpleGrantedAuthority("ROLE_ADMIN")

因为这是一个权限,而不是一个角色,你应该添加 ROLE_ 前缀(如果你的意图是创建一个角色!)。调用 public InMemoryUserDetailsManager(Properties users) 构造函数也是如此,因为它使用权限 internally .

关于java - 我什么时候应该在 ROLE_ 前面加上 Spring Security?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42146110/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com