4/29 개발일기
spring security 를 적용하면서 spring framework에 대해 조금 더 알게 됐다. (내가 지금까지 알고 있던 건 spring의 ㅅ 자에도 닿지 못했던 것들이었다 ㅠㅠ) 여기에 대해 조금 정리를 하고 넘어보려고 한다.
1. pom.xml 에서 Spring security Dependency 입력 오류
spring security 를 사용하려고 pom.xml 에 spring security dependency를 입력하자마자 오류가 났다. Project > properties > maven > download sources 를 해도, update project를 해도 오류는 사라지지 않았다. 오류의 원인은 spring framework 버전과 spring security 버전 충돌 때문이었다.
spring security 는 4.x 버전이고 spring framework은 3.x 버전이어서 발생한 오류였다. 둘 다 동일하게 4.x 대로 맞춰주었다.
수정한 Spring framework과 Spring security 버전
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.1.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.1.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.1.6.RELEASE</version>
</dependency>
<!-- security -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>4.0.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId>
<version>4.0.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>4.0.4.RELEASE</version>
</dependency>
이 오류 해결방법을 찾다가 알게된 사실. 아래 링크에 들어가서 dependency 를 검색하면 해당 jar의 최신 버전 별 정보를 조회할 수 있다.
2. security 설정 파일에서 schemaLocation 오류
Spring에서 bean 설정하는 방법은 아래와 같이 다양하다.
(1) properties 파일 사용 (2) xml 파일 사용 (3) class 로 정의
나는 (2)번 방식으로 xml Configuration 파일을 사용하고 있었다. 그래서 security 설정파일을 xml Configuration 으로 만들고 있었는데, 이에 대한 예제를 찾아 복사하니 계속 오류가 발생했다. 알고보니 내가 pom.xml 에 기술한 security jar 버전과 xml configuration의 스키마 링크가 맞지 않았다.
스키마로케이션에 입력한 http://www.springframework.org/schema/security/spring-security-3.1.xsd 을 http://www.springframework.org/schema/security/spring-security-4.0.xsd 으로 변경했다.
변경한 스키마
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:security="http://www.springframework.org/schema/security"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-4.0.xsd">
3. security 설정 파일에서 ROLE_USER 오류
예제를 그대로 복사하다 보니 3.1 스키마 문법이 적용되어 있었다. <http> 아래 access="ROLE_USER" 가 자꾸 오류였다. 그래서 다시 구글링해 ROLE_USER 를 hasRole('ROLE_USER') 로 수정했다.
설정파일 변경내용
<security:http auto-config='true'>
<security:intercept-url pattern="/favicon.ico" access="ROLE_ANONYMOUS" />
<security:intercept-url pattern="/**" access="hasRole('ROLE_USER')" />
</security:http>