首页 > 解决方案 > Spring Security 在 Authentication 上获取延迟加载的属性

问题描述

我是 Spring Security 的新手,我使用 Springboot、Mysql 来创建一个使用 jwt 进行身份验证的示例应用程序。但是,我注意到在登录请求时,当身份验证发生时,Spring 安全性正在检索所有延迟加载的属性(在我的情况下为角色,个人详细信息)。有什么方法可以让 Spring 安全知道忽略额外调用来获取 PersonalDetails。

应用属性

 logging.level.org.hibernate.SQL=DEBUG
 logging.level.org.hibernate.type=TRACE

用户模型

public class User {

    private Long id;

    private String username;

    private String password;

    @OneToOne(fetch=FetchType.LAZY, mappedBy="user")
    private PersonalDetails personalDetails;

    @ManyToMany(fetch = FetchType.LAZY)
    private Set<Role> roles = new HashSet<>();

   // getters and setters
}

授权控制器

    @PostMapping("/signin")
    public ResponseEntity<?> signin(@Valid @RequestBody LoginRequest loginRequest) {

         Authentication authentication = 
                 authenticationManager
                       .authenticate(
                          new UsernamePasswordAuthenticationToken(
                                 loginRequest.getUsernameOrEmail(), 
                                 loginRequest.getPassword()
                        )
          );

         SecurityContextHolder.getContext().setAuthentication(authentication);

         String jwtToken = tokenProvider.generateToken(authentication);

         return ResponseEntity.ok(new JwtResponse(jwtToken));

      }

标签: spring-bootspring-securityspring-datajwt-auth

解决方案


推荐阅读