- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我尝试使用 spring-security,但出现了这个错误。
java.lang.NullPointerException
at org.springframework.security.web.FilterChainProxy.getFilters(FilterChainProxy.java:223)
at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:196)
at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:176)
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:344)
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:261)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1074)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:314)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)
我在 web.xml 中包含过滤器
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<filter>
<filter-name>encoding-filter</filter-name>
<filter-class>
org.springframework.web.filter.CharacterEncodingFilter
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encoding-filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<display-name>Spring MVC Application</display-name>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<servlet>
<servlet-name>mvc-dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>mvc-dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
并在 applicationContext 文件中为这个过滤器创建一个 bean:
<bean id="springSecurityFilterChain" class="org.springframework.security.web.FilterChainProxy"> </bean>
在我在 applicationContext 文件中注册这个 bean 之前我有一个错误 no bean named 'springSecurityFilterChain' is defined
我没有使用 spring-security.xml 进行配置,而是在 SecurityConfig 类中配置安全。
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private UserDetailsServiceImpl userDetailsService;
@Autowired
public void registerGlobalAuthentication(AuthenticationManagerBuilder auth) throws Exception {
auth
.userDetailsService(userDetailsService);
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf()
.disable()
.authorizeRequests()
.antMatchers("/resources/**", "/**").permitAll()
.anyRequest().permitAll()
.and();
http.formLogin()
.loginPage("/login")
.loginProcessingUrl("/j_spring_security_check")
.failureUrl("/login?error")
.usernameParameter("j_username")
.passwordParameter("j_password")
.permitAll();
http.logout()
.permitAll()
.logoutUrl("/logout")
.logoutSuccessUrl("/login?logout")
.invalidateHttpSession(true);
}
我认为是 spring-security 文件配置的一些问题,但我不明白哪里出了问题。
最佳答案
我已经弄清楚这里发生了什么,但我认为您最好只坚持使用 Java Config 或 XML 配置,而不是在集成 Spring MVC 和安全性方面混合和匹配它们。
在 XML 配置中,springSecurityFilterChain 由 spring-security.xml 中的 http
命名空间创建。引用here .由于您已切换到 java 配置,因此没有创建 springSecurityFilterChain,这正是应用程序所提示的。
要在其中创建 springSecurityFilterChain,您需要执行以下 2 个步骤。
第一步
从您的 web.xml 中删除以下内容
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
第 2 步
创建一个 AbstractSecurityWebApplicationInitializer
,它将为您创建 springsecurityfilterchain。
public class SpringSecurityInitializer extends
AbstractSecurityWebApplicationInitializer {
}
现在 AbstractSecurityWebApplicationInitializer
documentation说当与 AbstractSecurityWebApplicationInitializer() 一起使用时,此类通常与 AbstractContextLoaderInitializer 的子类一起使用。
所以现在您必须自己创建 AbstractContextLoaderInitializer。为此,我做了 2 处更改
第 1 步:- 从 web.xml 中删除下面
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/applicationContext.xml
</param-value>
第 2 步:- 创建一个类 SpringAnnotationWebInitializer
和 ApplicationContextSpring
将具有以下内容
public class SpringAnnotationWebInitializer extends
AbstractContextLoaderInitializer {
@Override
protected WebApplicationContext createRootApplicationContext() {
AnnotationConfigWebApplicationContext applicationContext = new AnnotationConfigWebApplicationContext();
applicationContext.register(ApplicationContextSpring.class);
return applicationContext;
}
}
和ApplicationContextSpring
将是
@Configuration
@ImportResource("classpath:applicationContext.xml")
@Import(SecurityConfig.class)
public class ApplicationContextSpring {
}
正如我所说,创建 java 或 xml 配置要好得多。
关于java - org.springframework.security.web.FilterChainProxy.getFilters 中的 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31388029/
我有两个应用相同过滤器的模式。 除了上述两个之外,还有许多其他独特的模式和一个通用模式 /**/*.do*/** 我可以像下面这样在 pattern 属性中指定逗号分隔的多个模式吗: 最佳答案
我这样写代码: @ContextConfiguration(locations = { "classpath:/test/BeanConfig.xml" }) @RunWith(SpringJUnit
我试图找出一个涉及 Spring Security 和 SAML 的问题。我们正在尝试使用 Spring Security (spring-security-core-3.1.1.RELEASE.ja
我遇到与 Spring Saml2 相关的 Spring Security 配置问题,这会导致即使 IDP 成功响应,身份验证也始终为空。 我将 spring-security-saml2-core
我有一个 spring 应用程序,其配置文件如下所示。所有配置似乎都是正确的,但在调试时我发现,在初始化期间,spring 为 FilterSecurityInterceptor 创建了两个 bean
我需要测试我的 REST Controller ,它们使用 Spring Security 进行保护。我正在使用 MockMvc 作为 spring security reference sugges
我已将自己的过滤器配置为 spring security 中的 FilterChainProxy 的一部分。我很惊讶 init() 方法(从 Filter 接口(interface)实现)没有在这个过
我尝试使用 spring-security,但出现了这个错误。 java.lang.NullPointerException at org.springframework.security.web.F
我正在尝试在 Grails 应用程序中编写 LogoutController。我找到了一个工作代码: package myPackage import grails.plugin.springsecu
我正在尝试使用 spring 配置我的自定义过滤器 AccountVerificationFilter 并收到 NPE,这些是我的配置 我在 web.xml 中配置了 cpFilterCHain,如下
我是一名优秀的程序员,十分优秀!