我想使用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) -> {});
}
}
我想通过解释显然目前首先,当有多个配置的OAuth2提供程序时会显示默认登录页面来扩展Petr的回答。我预计Spring Boot会有一个聪明的技巧来轻松绕过此页面并自动选择正确的提供程序,例如基于原始请求中提供程序的客户端ID的存在。我艰难地发现事实并非如此。所以做到这一点的方法是...这不是很明显的为失败提供自定义处理程序的技巧——它将根据原始HTTP请求URL将用户重新引导到每个提供程序的正确OAuth2endpoint。我尝试了这个并且它起作用了,我花了一整天尝试其他解决方案的所有方式——我最初的场景是将附加参数传递给OAuth2方案,以便能够在成功身份验证后将它们找回来——他们过去常常这样做将Base64编码的信息附加到“state”URL请求参数中,但Spring Security目前不允许这样做。因此,唯一的替代方案是使用已经存在的这些参数调用受Spring Security保护的URL,因此当成功进行身份验证时,会在这些参数完好无损的情况下再次自动访问该URL。
相关:多个登录endpointSpring Security OAuth2
您需要设置oauth2Login。在
,并创建一个控制器映射,以返回所需的任何内容。下面是一个简单的例子。HttpSecurity
config中登录页面
所以在你的安全配置中
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
方法。
您需要创建新的身份验证切入点并在配置中进行设置。
@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并检查用户是否退出以及密码是否正确