我已经挣扎了几天。我在Spring Boot中是新手,并且喜欢不使用XML配置的想法。
我创建了一个RESTfull应用程序(带有JSON)。我正在按照本教程正确配置身份验证。
我想我设法使用Java配置重现了几乎所有配置,除了一件事- AuthenticationEntryPoint
本教程在http
标签中使用这样的属性,并通过以下方式定义formLogin:
<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手册中的AuthenticationEntryPoint解释说:
可以使用<http>元素上的entry-point-ref属性来设置AuthenticationEntryPoint。
没有提及有关如何使用Java Configuration进行操作的任何内容。
那么,如何restAuthenticationEntryPoint
在不使用XML的情况下“注册”我自己的内容,以防止在使用formLogin时重定向到登录表单?
下面我将提及我尝试过的内容。
谢谢你们。
在我的尝试中,发现可以使用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
不要以为将登录表单替换为仅返回错误的自定义表单是一个好主意。
您提供的参考文档中的报价将您指向http.exceptionHandling()
。您可以在那里设置共享入口点。
http.exceptionHandling().authenticationEntryPoint(myEntryPoint);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句