我在GUI应用程序和后端之前有一个基于Spring Boot 2的安全网关,用于执行OAuth2身份验证。 它的配置就像
@Configuration
@EnableOAuth2Client
@EnableWebSecurity
public class SecurityGatewayConfig extends WebSecurityConfigurerAdapter{
@Bean
public SecurityGatewayAuthenticationFilter filter() {
return new SecurityGatewayAuthenticationFilter("/login");
}
@Override
public void configure(HttpSecurity http) {
http
.addFilterAfter(new OAuth2ClientContextFilter(), AbstractPreAuthenticatedProcessingFilter.class)
.addFilterAfter(filter(), OAuth2ClientContextFilter.class)
.httpBasic().authenticationEntryPoint(new LoginUrlAuthenticationEntryPoint("/login"))
.and()
...
它将请求重定向到/login
,SecurityGatewayAuthenticationFilter
针对外部OAuth2提供程序执行身份验证。
这对GIU应用程序非常有用。但是,在访问后端服务(路径中有 / api / )时,我需要采取其他行为:如果请求未通过身份验证,则不要重定向,而应立即返回 401 错误。
任何想法,如何为此配置Spring Security?
答案 0 :(得分:0)
如果我向您提出正确的问题,您可以做的是使用不同的ConfigurationAdapters。基本思路如下:
@Bean
public RequestMatcher defaultMatcher(@Qualifier("apiMatcher") RequestMatcher api, @Qualifier("anyother") RequestMatcher anyother) {
final RequestMatcher all = new AntPathRequestMatcher("/**");
final RequestMatcher nonApi = new NegatedRequestMatcher(new OrRequestMatcher(api, anyother));
return new AndRequestMatcher(all, nonApi);
}
如果您使用@ EnableResourceServer,Spring将按照您在Order()中添加的顺序评估每个请求,它将始终具有Order(3)
然后,您可以像这样的示例构建请求匹配器(在此示例中,它匹配所有请求,但明确排除其他一些请求):
lis = []
for i in range(len(spoken_train)):
item = spoken_train[i]
lis.append( item + np.zeros((1,item.shape[-1])))
myarray = np.concatenate(lis)
希望有帮助。
最好的问候, WiPu答案 1 :(得分:0)
您需要添加入口点过滤器
`@Component 公共最终类CustomAuthenticationEntryPoint实现 AuthenticationEntryPoint { @Override 公共无效开始(最终HttpServletRequest请求,最终 HttpServletResponse响应,最终AuthenticationException authException)引发IOException { response.sendError(HttpServletResponse.SC_UNAUTHORIZED,“未授权”); } } 当客户端未经身份验证访问资源时...
`