에러들과 해결책, 참고사이트를 정리했다.
원인: security-context.xml에서 <security:form-login /> 태그가 빠져서 그렇다.
커스텀 로그인페이지 코드를 주석처리하는 바람에 사라져서 에러가 났었다.
<security:http>
<security:intercept-url pattern="/sample/all" access="permitAll"/>
<security:intercept-url pattern="/sample/member" access="hasRole('ROLE_MEMBER')"/>
<security:intercept-url pattern="/sample/admin" access="hasRole('ROLE_ADMIN')"/>
<security:form-login />
<!-- <security:form-login login-page="/customLogout" invalidate-session="true" />-->
</security:http>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:security="http://www.springframework.org/schema/security"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security.xsd"
>
아래 요 부분이 킬포다. xsi:schemaLocation에 여러 url이 들어가도 따옴표로 구분짓지 않는다.
xmlns:security="http://www.springframework.org/schema/security"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security.xsd"
지금은 일단 java 설정보다 쉬운 xml 설정으로 공부하고 있다.
셋팅을 책보고 하다 인터넷 뒤지고 하다 진짜 10번은 말아먹었다가 겨우 페이지 하나 띄웠다;;
어려웠던 점
security-context.xml => sts에서는 namespace 체크하면 알아서 해준다는데 인텔리제이였고
코드 아무리 긁어다 붙여도 이상한 에러가 났었다. (지금은 기억이 안남)
체크리스트
1. security-context.xml 파일 위치
2. web.xml에서 security-context.xml을 제대로 param-value태그 안에 넣었는가.
3. 또한 web.xml에서 securityFilterChain을 제대로 설정했는가.
<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>
web.xml과 security-context.xml 그리고 pom.xml 의존성 설치를 제대로 했느냐가
설정 성공을 결정짓는다.
(root-context.xml, servlet-context.xml은 할 게 없다.)
pom.xml 의존성. 버전이 얘네가 같아야 한다고 하더라.
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId>
<version>5.0.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>5.0.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>5.0.6.RELEASE</version>
</dependency>
<!-- JSP에서 스프링 시큐리티 태그라이브러리를 사용할 수 있도록 -->
<!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-taglibs -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-taglibs</artifactId>
<version>5.0.6.RELEASE</version>
</dependency>
참고사이트
https://taetoungs-branch.tistory.com/157
https://doing7.tistory.com/15