如何解决登录前检查用户数据
我有http身份验证。
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
....
@Override
protected void configure(HttpSecurity http) throws Exception {
http.cors().and().csrf().disable()
.exceptionHandling().authenticationEntryPoint(unauthorizedHandler).and()
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()
.authorizeRequests()
.antMatchers("/api/auth/**").permitAll()
.anyRequest().authenticated();
http.addFilterBefore(authenticationJwtTokenFilter(),UsernamePasswordAuthenticationFilter.class);
}
....
}
因此,我在数据库中有一些有关试图进行身份验证的用户(userStatus)的数据。我想在身份验证之前检查它,如果用户状态为“已拒绝”之类的则抛出异常。
当然userStatus位于另一个类Profile(一对一关系)中
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
@Column(nullable = false)
private String username;
@Column(nullable = false)
private String password;
@NotBlank
@Size(max = 50)
@Email
private String email;
@OneToOne(mappedBy = "user",cascade = CascadeType.ALL)
private VerificationToken verificationToken;
@Setter
@OneToOne(cascade = CascadeType.PERSIST,mappedBy = "user")
private Profile profile;
....
}
public class Profile {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id",updatable = false,nullable = false)
private Long id;
@OneToOne(cascade = CascadeType.REMOVE)
@JoinColumn(name = "id_user",unique = true)
private User user;
@NonNull
String firstName;
@NonNull
String secondName;
String userStatus ;
@NonNull
String phone;
...
}
我听说过AspectJ或@PreAuthorize,但是如何将它们集成到/ login api中?
解决方法
还有另一种方法来实现此目的,方法是重写UsernamePasswordAuthenticationFilter#attemptAuthentication(例如:CustomUsernamePasswordAuthentication)并将自定义逻辑放在此处(在这种情况下,您应该将服务作为新类构造函数的参数传递,因为filter不会意识到spring)组件)
,使用 @Aspect 以及Spring AOP的 @Before 建议可以轻松完成。定义您连接点以拦截特定的api调用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。