当前位置: 首页 > 知识库问答 >
问题:

Spring Security OAuth-如何禁用登录页面?

陆畅
2023-03-14

我想使用OAuth 2使用Spring Security性保护我的应用程序。但是,我不希望服务器重定向传入的未经授权的请求,而是使用HTTP 401进行响应。可能吗?

示例:此代码将请求重定向到默认登录页面。

应用属性

spring.security.oauth2.client.registration.google.client-id=...
spring.security.oauth2.client.registration.google.client-secret=...

AuthConfig。JAVA

@Configuration
public class AuthConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
            .antMatchers("/secured/**").authenticated()
            .anyRequest().permitAll()
            .and()
            .oauth2Login();


        // https://stackoverflow.com/questions/31714585/spring-security-disable-login-page-redirect
        // deos not work
        // .and()
        // .formLogin().successHandler((request, response, authentication) -> {});
    }
}

共有3个答案

南门宇
2023-03-14

我想通过解释显然目前首先,当有多个配置的OAuth2提供程序时会显示默认登录页面来扩展Petr的回答。我预计Spring Boot会有一个聪明的技巧来轻松绕过此页面并自动选择正确的提供程序,例如基于原始请求中提供程序的客户端ID的存在。我艰难地发现事实并非如此。所以做到这一点的方法是...这不是很明显的为失败提供自定义处理程序的技巧——它将根据原始HTTP请求URL将用户重新引导到每个提供程序的正确OAuth2endpoint。我尝试了这个并且它起作用了,我花了一整天尝试其他解决方案的所有方式——我最初的场景是将附加参数传递给OAuth2方案,以便能够在成功身份验证后将它们找回来——他们过去常常这样做将Base64编码的信息附加到“state”URL请求参数中,但Spring Security目前不允许这样做。因此,唯一的替代方案是使用已经存在的这些参数调用受Spring Security保护的URL,因此当成功进行身份验证时,会在这些参数完好无损的情况下再次自动访问该URL。

相关:多个登录endpointSpring Security OAuth2

庄高谊
2023-03-14

您需要设置oauth2Login。在HttpSecurityconfig中登录页面,并创建一个控制器映射,以返回所需的任何内容。下面是一个简单的例子。

所以在你的安全配置中

http
 .authorizeRequests()
    .antMatchers("/noauth").permitAll()
  .oauth2Login()
    .loginPage("/noauth")

在控制器里

@GetMapping("/noauth")
public ResponseEntity<?> noAuth() {
    Map<String, String> body = new HashMap<>();
    body.put("message", "unauthorized");
    return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body(body);
}

您可以将map或pojo传递给body方法。

子车凌龙
2023-03-14

您需要创建新的身份验证切入点并在配置中进行设置。

@Configuration
public class AuthConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.exceptionHandling()
            .authenticationEntryPoint(new AuthenticationEntryPoint())
            .and()
            .authorizeRequests()
            .antMatchers("/secured/**").authenticated()
            .anyRequest().permitAll()
            .and()
            .oauth2Login();
    }
}

public class AuthenticationEntryPoint extends LoginUrlAuthenticationEntryPoint {    
    public AuthenticationEntryPoint()  {
        super("");
    }

    @Override
    public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authException) throws IOException, ServletException {
        response.sendError(401, "Unauthorized");
    }
}
 类似资料:
  • 有没有办法禁用Spring Security和登录页面的重定向。我的要求指定登录应该是导航菜单的一部分。 例子: 因此没有专门的登录页面。登录信息需要通过Ajax提交。如果发生错误,它应该返回指定错误的JSON,并使用正确的HTTP状态代码。如果验证通过,它应该返回一个200,然后javascript可以从那里处理它。 我希望这是有意义的,除非有任何更简单的方法可以通过Spring Securit

  • 我正在使用依赖项,以利用附带的几个类。但是,由于我想将其集成到现有的应用程序中,我只想使用这些类,而不是spring的默认登录/auth屏幕。 如何禁用此屏幕? 我无法通过扩展进行任何配置,因为我的主入口类已经扩展了。此外,vaadin应用程序基本上一直在相同的URL路径上运行,并使用内部导航。 那么,我能做些什么来禁用登录屏幕,但利用spring的安全功能呢?

  • 我想用selenium登录这个网页。我尝试了selenium的find_element_by_,并使用浏览器中的检查元素。但是我无法登录。我在搜索id、名称、类名,这样我就可以用send_keys传递数据,但是没有做到这些。有人能帮助我提供一些代码来将数据推送到所需的字段吗?谢谢。这就是我到目前为止所做的。 在此之后,我试图点击按钮登录使用 但它失败了。它给出了无法找到“登录”的错误。由于默认情况

  • 似乎Springboot自动配置自己来使用Tomcat的Logback。我想禁用它,并使用我在类路径中提供的一个。 LoggerFactory不是LoggerContext,但Logback位于类路径上。删除Logback或类[org.slf4j.impl.SimpleLoggerFactory]的竞争实现(类org.slf4j.impl.SimpleLoggerFactory)对象必须是类ch.

  • 问题内容: 我有一个login.html网页,允许用户输入用户名和密码。当他单击“提交”时,我将使用Javascript收集输入的值,然后对php文件进行Ajax POST调用,然后发送用户名和密码。 我在这里担心的是,这是发送用户名和密码的安全方法吗?如果不是,我如何确保从后端将数据从html文件发送到php的交易的安全性? php文件然后连接到MySql Db并检查用户是否退出以及密码是否正确