A granted authority textual representation

0

Cześć
Dostaję błąd w momencie próby odwołania się do metody register z klasy Controllera

Controller


    @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);
    	}
    }

SecurityConfig


    @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();
    	}
    }

UserSerice


    @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();
    	}
    }

User Model

    @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;
    	}
    }

Error

java.lang.IllegalArgumentException: A granted authority textual
representation is required at
org.springframework.util.Assert.hasText(Assert.java:284)
~[spring-core-5.2.4.RELEASE.jar:5.2.4.RELEASE] at
org.springframework.security.core.authority.SimpleGrantedAuthority.<init>(SimpleGrantedAuthority.java:38)
~[spring-security-core-5.2.2.RELEASE.jar:5.2.2.RELEASE] at
com.xxx.xx.models.User.getAuthorities(User.java:71) ~[classes/:na] at
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native
Method) ~[na:na] at
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
~[na:na] at
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
~[na:na] at
java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]

0

A jak wyglądają u ciebie te role? Bo default Springowy to ROLE_COŚTAM i musisz go albo zmienić w konfiguracji (rolePrefix), albo się go trzymać.

0

@Shalom:
Przykładowy Json

{
  "accountNonExpired": true,
  "accountNonLocked": true,
  "authorities": [
    {
      "authority": "string"
    }
  ],
  "credentialsNonExpired": true,
  "enabled": true,
  "id": 0,
  "lastName": "Piotr",
  "name": "Piotr",
  "password": "Piotr",
  "role": "ROLE_ADMIN",
  "username": "Piotr"
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1