2017-04-18 159 views
2

我有一个Spring Boot Web应用程序与几个REST控制器。它使用Spring Security进行基于表单的身份验证(1)春季安全:不需要身份验证本地请求

此外,应用程序正在读取存储的请求并将其分派给自己。为此,我有一个自定义的Spring Dispatcher servlet和一个用于存储请求的过滤器链。当被调用时,它让Spring DispatcherServlet将HTTP请求发送到正确的REST控制器(2)

我想以不需要对(2)情况进行身份验证的方式设置Spring安全性 - 是当http请求来自应用程序本身时。

有没有人有一个想法如何实现这一目标?

+1

是的,我想完全禁用Spring Security进行的第二种情况。不幸的是,没有开始的路径,它可以是任何资源。 –

+1

由于我构建请求然后将它传回到Spring DispatcherServlet,我想我可以设置一个属性 - javax.servlet.ServletRequest.setAttribute。另一个选择是使用动态值(令牌?)设置某个请求标头,然后允许具有有效令牌的请求。 –

+0

我写了一个答案,但它只在技术上解决了这个问题。你需要确保这个请求,因为你不想让每个机构绕过Spring Security。您可以使用令牌(如您所述),但您也可以使用Spring Secrity进行检查。也许更好的方法是使用forward而不是重定向。它不会再被Spring Security检查。 – dur

回答

4

你可以创建一个自定义RequestMatcher

简单的策略来匹配HttpServletRequest

用您的逻辑来决定请求是否应该被忽略。

然后添加自定义RequestMatcherAbstractRequestMatcherRegistry#requestMatchers

协会RequestMatcher实例与AbstractConfigAttributeRequestMatcherRegistry

清单,忽视RequestMatcher的清单,WebSecurity#ignoring

允许添加Spring Security应该提供的实例忽视。

WebSecurityConfigurerAdapter#configure方法:

重写此方法来配置WebSecurity。例如,如果你想忽略某些请求。

例如:

public void configure(WebSecurity web) throws Exception { 
    web 
     .ignoring() 
      .requestMatchers(new MyInternalRequestMatcher()); 
} 
0

为来自应用程序的路径添加以下url拦截。

<security:intercept-url pattern="path" access="IS_AUTHENTICATED_ANONYMOUSLY" />