我在spring安全中的注册权限有问题
我不能注册方法
我试图设置对每条路径的访问,但没有帮助
控制器
@RestController
public class UserController {
private UserService userService;
public UserController(UserService userService) {
this.userService = userService;
}
@PostMapping("/register")
public Long register(@RequestBody User user){
return userService.register(user);
}
}
安全配置
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Bean
public PasswordEncoder getPasswordEncoder() {
return new BCryptPasswordEncoder();
}
private UserDetailsServiceImpl userDetailsService;
public SecurityConfig(UserDetailsServiceImpl userDetailsService) {
this.userDetailsService = userDetailsService;
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService);
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable();
http.headers().disable();
http.authorizeRequests().
antMatchers("/").permitAll()
.antMatchers("/register").permitAll();
}
}
用户服务
@Service
public class UserService {
private UserRepository userRepository;
private PasswordEncoder passwordEncoder;
public UserService(UserRepository userRepository, PasswordEncoder passwordEncoder) {
this.userRepository = userRepository;
this.passwordEncoder = passwordEncoder;
}
public Long register(User user){
user.setPassword(passwordEncoder.encode(user.getPassword()));
userRepository.save(user);
return user.getId();
}
}
用户模型
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import java.util.*;
@Entity
public class User implements UserDetails {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String userName;
private String lastName;
private String password;
private String role;
public User() {
}
..get and set...
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
List<GrantedAuthority> listRole = new ArrayList<GrantedAuthority>();
listRole.add(new SimpleGrantedAuthority(role));
return listRole;
}
@Override
public String getPassword() {
return password;
}
@Override
public String getUsername() {
return userName;
}
@Override
public boolean isAccountNonExpired() {
return true;
}
@Override
public boolean isAccountNonLocked() {
return true;
}
@Override
public boolean isCredentialsNonExpired() {
return true;
}
@Override
public boolean isEnabled() {
return true;
}
}
错误
java.lang.IllegalArgumentException:在org.springframework.util.assert.hastext(assert.java:284)~[spring-core-5.2.4.release.jar:5.2.4.release]在org.springframework.security.core.authority.simplegrantedauthority.java:38)~[spring-security-core-5.2.2.2.release.jar:5.2.2.release]在
这是我的JSON,我使用defult角色。我尝试返回一个空列表,但我有同样的错误
{
"accountNonExpired": true,
"accountNonLocked": true,
"authorities": [
{
"authority": "string"
}
],
"credentialsNonExpired": true,
"enabled": true,
"id": 0,
"lastName": "Piotr",
"name": "Piotr",
"password": "Piotr",
"role": "ROLE_ADMIN",
"username": "Piotr"
}
邮递员错误
**"timestamp": "2020-04-01T15:20:05.670+0000",
"status": 500,
"error": "Internal Server Error",
"message": "JSON conversion problem: A granted authority textual representation is required; nested exception is com.fasterxml.jackson.databind.JsonMappingException: A granted authority textual representation is required\n at [Source: (PushbackInputStream); line: 4, column: 18] (through reference chain: com.xxx`enter code here`.xxx.models.User[\"authorities\"])",
"path": "/register"
}**
在用户模型类中,确保设置了一个角色,以便getAuthorities()方法工作。
您得到的错误提示您正在使用“null”角色执行“new SimpleGrantedAuthority”。
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
List<GrantedAuthority> listRole = new ArrayList<GrantedAuthority>();
listRole.add(new SimpleGrantedAuthority(role)); // this is the problematic line!
return listRole;
}
如果您没有角色,那么只需返回一个空列表。
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
return Collections.emptyList();
}
我有一个具有两个RESTendpoint的应用程序: 获取/api/产品(不安全) POST/api/产品(安全) 对于第一个endpoint,我不想发送“授权”标头。为此,我配置了以下xml: 对于第二个endpoint,我确实想发送“授权”标头。因此,我配置了这个xml: 令我惊讶的是,GET /api/products需要一个“授权”标头,它返回401。POST /api/products工
2018-10-17 20:05:37.715错误15968---[nio-8090-exec-3]W.A.UsernamePasswordAuthenticationFilter:尝试对用户进行身份验证时出现内部错误。 某些日志: 2018-10-17 20:05:29.932信息15968---[nio-8090-exec-1]O.A.C.C.C.[Tomcat].[localhost].[/
spring安全中有一些概念和实现,例如接口,用于获取授权/控制访问的权限。 我希望允许的操作,如createSubUsers或deleteAccounts,我允许管理员(使用角色)执行这些操作。 当我在网上看到教程/演示时,我感到很困惑。我试着把我读到的东西联系起来,但我认为我们可以互换地对待这两者。 我看到使用字符串?我绝对是在理解上做错了。这些在spring安全概念上是什么? 如何将用户的角
我想用Spring保护我的HATEOAS REST API构建。所有请求都需要授权,将请求发布到“/rooms”需要管理员角色。我的WebSecurityConfigureAdapter实现代码现在看起来像这样: 现在,如果我把“anyRequest().authenticated()”行放在“antMatchers…”之前,所有资源都只需要身份验证行,但所需的“管理员”角色不起作用或无法应用,反
在我的spring boot web应用程序中,我使用了第三方服务进行授权,我的应用程序只是一个内容提供商。父应用程序使用site minder进行身份验证。我的应用程序在头中获取用户Id,并调用第三方api设置具有权限的UserDetails。 我的要求是处理场景时,第三方服务的授权是关闭。目前,在本例中,我将UserDetails设置为没有角色,因为每个endpoint都被授权绑定,所以如果授
在这个留档Spring Security MVC Test中描述了如何使用Spring Security测试安全的ressource。我遵循了提供的所有步骤,但访问受保护的ressource仍然会返回错误代码401(未经授权)。 这是我的测试课 我的资源服务器配置: 如果你想看看整个项目,你可以在这里找到。我已经尝试了不同的测试运行程序和教程中描述的所有内容,但我找不到一个解决方案,如何在测试期间