gpt4 book ai didi

java - 如何在没有 XML 配置的情况下定义自定义 AuthenticationEntryPoint

转载 作者:IT老高 更新时间:2023-10-28 13:46:20 25 4
gpt4 key购买 nike

我这几天一直在苦苦挣扎。我是 Spring Boot 的新手,喜欢不使用 XML 配置的想法。

我创建了一个 RESTfull 应用程序(使用 JSON)。我关注 this tutorial正确配置身份验证。

我想我设法使用 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 manual 中的AuthenticationEntryPoint 解释说:

AuthenticationEntryPoint can be set using the entry-point-ref attribute on the < http > element.

没有提及如何使用 Java 配置。

那么如何在没有 XML 的情况下“注册”我自己的 restAuthenticationEntryPoint 以防止在使用 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 服务,因此不应该这样做。

documentation对于 FormLoginConfigurer (类 .formLogin() 使用)说:

Shared Objects Created

The following shared objects are populated

AuthenticationEntryPoint

但找不到覆盖它的方法。
有什么想法吗?

附言
不要认为将登录表单覆盖为只返回错误的自定义表单是一个好主意。

最佳答案

您提供的引用文档中的引用指向您 http.exceptionHandling()。您可以在那里设置共享入口点。

http.exceptionHandling().authenticationEntryPoint(myEntryPoint);

关于java - 如何在没有 XML 配置的情况下定义自定义 AuthenticationEntryPoint,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24684806/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com