我正在设置 Spring Security 并在配置指定访问某些地址以仅提供授权时遇到问题,您仍然可以在未经授权的情况下访问它们。
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter{
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.authorizeRequests()
.anyRequest().authenticated();
}
}
@RestController
public class TestController {
@PostMapping(value = "/test")
public List<String> postHello(@RequestBody ArrayList<String> strings){
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
return strings
.stream()
.map(s -> "Print "+s)
.collect(Collectors.toList());
}
}
使用此配置,我将在请求正文中向http://localhost:8080/test["one","two"]
发送请求,我将其放入并期望请求不会通过,因为我在 Spring Security 设置中指定了所有路径必须通过授权检查anyRequest().authenticated()
。
浏览谷歌后,我看到问题可能web.xml
是没有过滤器设置。
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>
org.springframework.web.filter.DelegatingFilterProxy
</filter-class>
<init-param>
<param-name>targetBeanName</param-name>
<param-value>springSecurityFilterChain</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
添加过滤器后,我收到一个错误,即没有这样的 bean springSecurityFilterChain
。我要将bean添加到配置中...
<bean
id="springSecurityFilterChain"
class="org.springframework.web.filter.DelegatingFilterProxy"/>
服务器通常是stratos,但值得发送请求,因为我收到以下错误:
javax.servlet.ServletException: Filter execution threw an exception
java.lang.StackOverflowError
org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:357)
org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:270)
org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:357)
org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:270)
...
...
我无法弄清楚我到底做错了什么。也许根本不需要这个过滤器,你只需要调整配置。如果有人已经遇到过这样的问题,我将不胜感激。
build.gradle
application-context.xml
dispatcher-servlet.xml
web.xml
发现由于某种原因过滤器没有启动
DelegatingFilterProxy
。问题是它
dispatcher-servlet.xml
没有在web.xml
.添加
web.xml
以下块后,一切正常: