我正在开发一个Spring-Boot应用程序,我遇到的问题如下:
默认情况下,我的控制器的每个请求都会重定向到/ login,所以我不能这样使用它。
我可以通过设置
来禁用/登录security.oauth2.resource.filter-order = 3
在application.properties中。
但我想知道如何仅针对非浏览器禁用它,所以我仍然可以使用登录。
编辑:
这将是我的方法:
http.antMatcher("/api/**")
.authorizeRequests().anyRequest().authenticated();
http.antMatcher("/**")
.formLogin();
从/ api /运行的所有东西都是REST,只能由Oauth处理。 休息应该由登录处理。
但它仍然无法正常工作,我仍在进行重定向。
没关系,修复它。感谢userWithLongNumber!
就我而言,事实证明我的WebSecurity配置错误。 这现在有效:
@Override
protected void configure(HttpSecurity http) throws Exception {
http.
formLogin().permitAll()
.and()
.authorizeRequests().anyRequest().authenticated();
}
My RessourceServerConfig如下所示:
@Override
public void configure(HttpSecurity http) throws Exception {
http
.exceptionHandling()
.authenticationEntryPoint(customAuthenticationEntryPoint)
.and()
.logout()
.logoutUrl("/oauth/logout")
.logoutSuccessHandler(customLogoutSuccessHandler)
.and()
.headers()
.frameOptions().disable()
.and()
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.authorizeRequests()
.antMatchers("/api/**").authenticated();
}
}
答案 0 :(得分:1)
您需要降低主应用程序安全过滤器的优先级。
如Spring Boot教程中所述。
@EnableResourceServer注释默认使用@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER-1)创建安全过滤器,因此通过将主应用程序安全性移动到@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER),我们可以确保OAuth资源的规则优先
设置
security.oauth2.resource.filter-order = 3
不会禁用主安全过滤器。它只是将其优先级更改为较低的值。 (负值具有最高优先级。-3具有高于3的优先级)
据我所知,您的问题没有在ResourceServerConfiguration中正确设置匹配器。使其具体如下。
http.antMatcher("/helloOAuth")
.authorizeRequests().anyRequest().authenticated();
https://github.com/lanka-guide/simple-oauth2-server有一个示例实现。可能会有帮助。