[Spring_Security] Error creating bean with name 'org.springframework.security.filterChains
2022. 12. 20. 17:47ㆍ[Error]_
728x90
반응형
환경
Eclipse 최신버전 2022-09 (4.25.0)
Tomcat - 10.0.23 v
maven Artifact ID : maven-archetype-webapp 1.4v
Spring 6.0.2 ver
Spring Security 6.0.0 ver
spring-jdbc : 6.0.2 ver
mybatis : 3.5.11ver
mybatis-spring : 3.0.1ver
문제상황
오류코드
Error creating bean with name 'org.springframework.security.filterChains': Cannot resolve reference to bean 'org.springframework.security.web.DefaultSecurityFilterChain#0' while setting bean property 'sourceList' with key [0]
원인 파악
원래 intercept-url 이 한줄일 경우에는 오류가 나지 않았습니다.
<intercept-url pattern="/login/**" access="permitAll" />
여러군대 intercept 지정시 오류발생하였습니다.
<intercept-url pattern="/login/**" access="permitAll" />
<intercept-url pattern="/menu1" access="hasRole('ROLE_ADMIN')" />
<intercept-url pattern="/**" access="permitAll" />
원인
spring security 6.0.0 버전 부터는
http 태그에 다음과 같은 항목이 추가되었습니다.
번역
- request-matcherRequestMatcher 수신 요청과 일치시키기 위해 에서 사용되는 전략 FilterChainProxy과 에서 생성된 빈 을 정의합니다 intercept-url. 옵션은 현재 Spring MVC mvc, ant ant, regular-expression 및 case-insensitive regular-expression에 대해 각각 , 및 입니다 regex. pattern , method 및 servlet-path 속성 을 사용하여 ciRegex각 intercept-url 요소 에 대해 별도의 인스턴스가 생성됩니다. Ant 경로는 를 사용하여 일치 하고 정규 표현식은 를 사용하여 일치 하며 Spring MVC 경로는AntPathRequestMatcherRegexRequestMatcherMvcRequestMatcher사용. 일치가 수행되는 방법에 대한 자세한 내용은 이러한 클래스에 대한 Javadoc를 참조하십시오. 개미 경로는 기본 전략입니다.
원본 링크
이전 버전에서는 request-matcher 를 부여하지 않아도
intercept-url 이 여러개 사용 가능하였으나
6.0.0 이상버전에는 ant,mvc,regex,ciRegex 중 선택하여 지정해야 합니다.
저의 경우 절대경로를 사용하였기 때문에 ant 를 지정하니 오류가 해결되고 정상적으로
intercept - url 이 작동하였습니다.
securityContext 전문
<?xml version="1.0" encoding="UTF-8"?>
<b:beans xmlns="http://www.springframework.org/schema/security"
xmlns:b="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/security https://www.springframework.org/schema/security/spring-security.xsd">
<!-- <global-method-security -->
<!-- pre-post-annotations="enabled"> -->
<!-- <expression-handler ref="expressionHandler" /> -->
<!-- </global-method-security> -->
<!-- http 요청시 처리 로직 -->
<http request-matcher="ant" auto-config="true">
<!-- url intercept 설정 -->
<intercept-url pattern="/login/**" access="permitAll" />
<intercept-url pattern="/menu1" access="hasRole('ROLE_ADMIN')" />
<intercept-url pattern="/**" access="permitAll" />
<!-- 로그인 페이지 설정 -->
<form-login login-page="/login/login"
username-parameter="username" password-parameter="password"
login-processing-url="/loginProcessing"
authentication-success-handler-ref="loginSuccessHandler"
authentication-failure-handler-ref="loginFailureHandler" />
<!-- 엑세스 거부시 설정 -->
<access-denied-handler ref="accessDeniedHandler" />
<!-- 로그아웃 설정 페이지 아직 미구현 -->
<logout logout-url="/logout" logout-success-url="/login/login"
invalidate-session="true" />
<csrf disabled="true"/>
</http>
<!-- 엑세스 거부 프로세스 객체 (빈) 등록 -->
<!-- 구현체의 defaultDeniedUrl 에 value 의 값을 대입 -->
<b:bean id="accessDeniedHandler"
class="com.yoon.loginHelp.security.CustomAccessDeniedHandler">
<b:property name="defaultDeniedUrl" value="/login/login"></b:property>
</b:bean>
<!-- 로그인 성공시 작동할 객체(빈) 등록-->
<b:bean id="loginSuccessHandler"
class="com.yoon.loginHelp.security.LoginSuccessHandler">
</b:bean>
<!-- 로그인 실패시 작동할 객체(빈) 등록-->
<!-- 해당 클래스의(구현체의) defaultFailureUrl 에 value 값 대입-->
<b:bean id="loginFailureHandler"
class="com.yoon.loginHelp.security.LoginFailureHandler">
<b:property name="defaultFailureUrl" value="/login/error" />
</b:bean>
<!-- 로그인 프로세스-->
<!-- 구현체에 기존 security 에서 작동하는 메소드 오버라이드 하여 커스텀화 가능-->
<authentication-manager>
<authentication-provider
ref="customAuthenticationProvider" /> <!-- 로그인 관련 로직 구현 -->
</authentication-manager>
<!-- 로그인 구현체에 등록한 객체의 빈 등록 -->
<!-- 로그인 관련 로직 구현 -->
<b:bean id="customAuthenticationProvider"
class="com.yoon.loginHelp.security.CustomAuthenticationProvider" />
</b:beans>
감사합니다.
728x90
반응형