如何在没有 XML 配置的情况下定义自定义身份验证入口点
2022-09-01 09:32:17
我已经挣扎了几天了。我对Spring Boot有点陌生,喜欢不使用XML配置的想法。
我创建了一个RESTfull应用程序(使用JSON)。我正在按照本教程正确配置身份验证。
我想我设法使用Java配置复制了几乎所有的配置,除了一件事 -AuthenticationEntryPoint
本教程使用类似如下的属性 in 标记,并按以下方式定义 formLogin:http
<http entry-point-ref="restAuthenticationEntryPoint">
<intercept-url pattern="/api/admin/**" access="ROLE_ADMIN"/>
<form-login
authentication-success-handler-ref="mySuccessHandler"
authentication-failure-handler-ref="myFailureHandler"
/>
<logout />
</http>
Spring Security手册中的AuthorationEntryPoint解释说:
可以使用 http > 元素上的 entry-point-ref 属性设置 AuthenticationentryPoint <。
没有提到任何关于如何使用Java配置来做到这一点的信息。
那么,如何在没有XML的情况下“注册”我自己的,以防止在使用formLogin时重定向到登录表单?restAuthenticationEntryPoint
下面我将提到我尝试过的东西。
谢谢大家。
在我的尝试中,发现您可以使用basicAuth定义它,如下所示:
@Configuration
@Order(1)
public static class RestWebSecurityConfigurationAdapter extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
if (restAuthenticationEntryPoint == null) {
restAuthenticationEntryPoint = new RestAuthenticationEntryPoint();
}
http
.authorizeRequests()
.antMatchers("/**").hasAnyRole(Sec.ADMIN,Sec.SUPER_USER)
...
.and()
.httpBasic()
.authenticationEntryPoint(restAuthenticationEntryPoint)
但是我使用的是这样的表单登录(没有httpBasic部分):
.and()
.formLogin()
.successHandler(mySavedRequestAwareAuthenticationSuccessHandler)
.failureHandler(simpleUrlAuthenticationFailureHandler)
问题是,当它没有收到凭据时,它会重定向到登录表单。由于这是一项 REST 服务,因此不应这样做。
(类使用)的文档说:FormLoginConfigurer
.formLogin()
创建的共享对象
填充以下共享对象
AuthenticationEntryPoint
但找不到覆盖它的方法。
有什么想法吗?
PS
:不要认为将登录表单覆盖为仅返回错误的自定义表单是一个好主意。