[SPRING] org.springframework.security.web.FilterChainProxy.getFilters에서의 NullPointerException
SPRINGorg.springframework.security.web.FilterChainProxy.getFilters에서의 NullPointerException
나는 봄 보안을 사용하려고 시도했는데이 오류가 발생했습니다.
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 id="springSecurityFilterChain" class="org.springframework.security.web.FilterChainProxy"> </bean>
이 bean을 applicationContext 파일에 등록하기 전에 'springSecurityFilterChain'이라는 bean을 정의하지 않았다는 오류가 발생했습니다.
구성에 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);
}
}
스프링 - 보안 파일의 설정에 문제가있는 것 같지만 잘못 이해할 수는 없습니다.
해결법
-
==============================
1.여기서 무슨 일이 일어나고 있는지 알았지 만 Spring MVC와 Security의 통합과 관련하여 이들을 혼합하고 매칭하는 것보다 Java Config 또는 XML 설정 만하는 것이 훨씬 낫다고 생각합니다.
여기서 무슨 일이 일어나고 있는지 알았지 만 Spring MVC와 Security의 통합과 관련하여 이들을 혼합하고 매칭하는 것보다 Java Config 또는 XML 설정 만하는 것이 훨씬 낫다고 생각합니다.
XML 설정에서, springSecurityFilterChain은 spring-security.xml의 http 네임 스페이스에 의해 생성됩니다. 여기를 참조하십시오. java 설정으로 전환 했으므로 springSecurityFilterChain이 생성되지 않습니다. 정확히 application이 불평하는 부분입니다.
springSecurityFilterChain을 생성하려면 다음 2 단계를 수행해야합니다.
1 단계
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 단계
springsecurityfilterchain을 생성하는 AbstractSecurityWebApplicationInitializer를 만듭니다.
public class SpringSecurityInitializer extends AbstractSecurityWebApplicationInitializer { }
이제 AbstractSecurityWebApplicationInitializer 문서에 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; } }
ApplicationContext Spring은 다음과 같다.
@Configuration @ImportResource("classpath:applicationContext.xml") @Import(SecurityConfig.class) public class ApplicationContextSpring { }
내가 말했듯이, 당신은 자바 또는 XML 구성을 만드는 것이 훨씬 낫다.
-
==============================
2.XML 구성에 null 필터 목록이있는 FilterChainProxy 빈을 만들고이 빈은 DelegatingFilterProxy에 의해 web.xml에서 사용 된 것입니다. FilterChainProxy # getFilters는 null리스트를 반복 처리하려고 시도하고 자연스럽게 NullPointerException으로 실패합니다.
XML 구성에 null 필터 목록이있는 FilterChainProxy 빈을 만들고이 빈은 DelegatingFilterProxy에 의해 web.xml에서 사용 된 것입니다. FilterChainProxy # getFilters는 null리스트를 반복 처리하려고 시도하고 자연스럽게 NullPointerException으로 실패합니다.
문제의 근본 원인은 Java 구성과 이와 같은 전통적인 XML 구성을 함께 사용할 수 없다는 것입니다. Java 구성은 XML을 통해 구성된 Bean과 아무 관련이없는 별도의 FilterChainProxy Bean을 작성합니다.
from https://stackoverflow.com/questions/31388029/nullpointerexception-at-org-springframework-security-web-filterchainproxy-getfil by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring Boot + Spring OAuth Java 구성 (0) | 2019.05.20 |
---|---|
[SPRING] Spring Batch : json 파일을 읽도록 FlatFileItemReader를 설정하는 방법은 무엇입니까? (0) | 2019.05.20 |
[SPRING] JSON 컨텐츠 + 다중 multipart 파일을 사용한 Spring MVC rest 서비스 (0) | 2019.05.20 |
[SPRING] Play-Framework 2.4에서 선택하지 않은 Spring-Data-Mongodb 의존성 (0) | 2019.05.20 |
[SPRING] Spring MVC에서 써드 파티 WSDL 서비스를 사용하는 방법 (0) | 2019.05.19 |