当前位置: 首页 > 知识库问答 >
问题:

在spring安全中需要授权文本表示

郁博学
2023-03-14

我在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]在

共有2个答案

商业
2023-03-14

这是我的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"
}**
白阳煦
2023-03-14

在用户模型类中,确保设置了一个角色,以便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(未经授权)。 这是我的测试课 我的资源服务器配置: 如果你想看看整个项目,你可以在这里找到。我已经尝试了不同的测试运行程序和教程中描述的所有内容,但我找不到一个解决方案,如何在测试期间