전자정부 시큐리티를 덜어내고 스프링 시큐리티를 적용하는 문제
- 작성자 :
- 응***자
- 작성일 :
- 2024-10-31 11:20:55
- 조회수 :
- 81
- 구분 :
- 공통컴포넌트 / 4.1
- 진행상태 :
- 완료
Q
안녕하세요.
프로젝트 초기 개발 방향이 전자정부 프레임워크를 이용하여 로그인 기능을 구성하는것이었으나 이후 수정되어
로그인은 전자정부를 사용하지 않고 스프링 시큐리티를 이용하여 개발하도록 되었습니다.
그래서 올일원 패키지에 들어있던 전자정부 시큐리티 기능들을 덜어내고 스프링 시큐리티를 적용하는 과정에서 문제가 생겼습니다ㅜ
< 작업한 내용>
1) globals.properties 파일에서 Globals.Auth = session 상태
2) pom.xml에서 아래 전자정부 시큐리티 의존성 부분 주석 처리
<dependency>
<groupId>org.egovframe.rte</groupId>
<artifactId>org.egovframe.rte.fdl.security</artifactId>
<version>${org.egovframe.rte.version}</version>
</dependency>
3) context-security.xml 파일 제거
4) EgovWebApplicationInitializer.java 에서 EgovSpringSecurityLoginFilter, EgovSpringSecurityLogoutFilter, EgovLoginPolicyFilter, HttpSessionEventPublisher 부분 주석처리
5) pom.xml에 스프링 시큐리티 의존성 추가(5.3.2)
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>5.3.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>5.3.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId>
<version>5.3.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-taglibs</artifactId>
<version>5.3.2.RELEASE</version>
</dependency>
<톰캣 기동시 발생 에러 - 로그 파일 첨부>
스프링 시큐리티 의존성 추가가 잘못된 것인지, 아니면 삭제하지 않고 남아있는 전자정부 시큐리티 관련 처리 파일들(EgovWebApplicationInitializer.java, EgovSpringSecurityLoginFilter.java 등등)과 충돌이 일어나는 것인지 궁금합니다.
프로젝트 초기 개발 방향이 전자정부 프레임워크를 이용하여 로그인 기능을 구성하는것이었으나 이후 수정되어
로그인은 전자정부를 사용하지 않고 스프링 시큐리티를 이용하여 개발하도록 되었습니다.
그래서 올일원 패키지에 들어있던 전자정부 시큐리티 기능들을 덜어내고 스프링 시큐리티를 적용하는 과정에서 문제가 생겼습니다ㅜ
< 작업한 내용>
1) globals.properties 파일에서 Globals.Auth = session 상태
2) pom.xml에서 아래 전자정부 시큐리티 의존성 부분 주석 처리
<dependency>
<groupId>org.egovframe.rte</groupId>
<artifactId>org.egovframe.rte.fdl.security</artifactId>
<version>${org.egovframe.rte.version}</version>
</dependency>
3) context-security.xml 파일 제거
4) EgovWebApplicationInitializer.java 에서 EgovSpringSecurityLoginFilter, EgovSpringSecurityLogoutFilter, EgovLoginPolicyFilter, HttpSessionEventPublisher 부분 주석처리
5) pom.xml에 스프링 시큐리티 의존성 추가(5.3.2)
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>5.3.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>5.3.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId>
<version>5.3.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-taglibs</artifactId>
<version>5.3.2.RELEASE</version>
</dependency>
<톰캣 기동시 발생 에러 - 로그 파일 첨부>
스프링 시큐리티 의존성 추가가 잘못된 것인지, 아니면 삭제하지 않고 남아있는 전자정부 시큐리티 관련 처리 파일들(EgovWebApplicationInitializer.java, EgovSpringSecurityLoginFilter.java 등등)과 충돌이 일어나는 것인지 궁금합니다.
환경정보
-
- OS 정보 : Windows 11
- 표준프레임워크 버전 : 4.1.0
- JDK(JRE) 정보 : Java 11
- WAS 정보 : Apache Tomcat 9.0.55
- DB 정보 : MySql
- 기타 환경 정보 :
A
안녕하세요.
표준프레임워크 센터입니다.
1. Spring Security 버전 문제
표준프레임워크 4.1 버전은 Spring Security 5.7.1 버전과 호환됩니다.
만약 Spring Security 5.3.2 버전을 적용한다면 5.7.1 버전에 있어야 할 메서드가 존재하지 않으므로
로그에서와 같이 NoSuchMethodError가 발생합니다.
따라서 Spring Security 버전을 5.7.1로 변경 부탁드립니다.
오픈소스별 호환성은 아래 링크에서 확인 가능합니다.
https://www.egovframe.go.kr/home/sub.do?menuNo=13
2. globals.properties 설정 문제
EgovWebApplicationInitializer에서 Globals.Auth 값에 따라 로그인 방식이 분기됩니다.
만약 globals.properties 파일에서 Globals.Auth = session를 설정한다면 로그인시 Session 방식 접근 제어 방식의 로직이 동작하게 되므로
원하시는 Spring Security 방식으로 동작하지 않을 수 있습니다.
따라서 Globals.Auth = security로 설정하거나, 다른 방식으로 수정하시기 바랍니다.
표준프레임워크의 Security 설정 간소화는 아래 링크에서 확인 가능합니다.
https://www.egovframe.go.kr/wiki/doku.php?id=egovframework:rte4.1:fdl:server_security:xmlschema
3. session 방식 접근 제어에서 동작하는 로직들
표준프레임워크에서 제공하는 Spring Security 기능이 아니라 커스텀한 Spring Security 기능을 사용한다고 하더라도,
Globals.Auth = session으로 설정해 놓는다면 기본적으로 아래와 같은 로직들이 동작합니다.
- src/main/resources/egovframework/spring/com/context-egovuserdetailshelper.xml : 인증 방식(Session, Spring Security)에 따라 적용되는 설정
- src/main/webapp/WEB-INF/config/egovframework/springmvc/egov-com-access.xml : 권한관리.
- src/main/webapp/WEB-INF/config/egovframework/springmvc/egov-com-interceptor.xml : 로그인시 URL 및 로그인 여부 체크(profile="session"으로 수정했을 경우에만)
표준프레임워크의 Session 방식 접근 제어는 아래 링크에서 확인 가능합니다.
https://www.egovframe.go.kr/wiki/doku.php?id=egovframework:rte4.1:fdl:access
감사합니다.
표준프레임워크 센터입니다.
1. Spring Security 버전 문제
표준프레임워크 4.1 버전은 Spring Security 5.7.1 버전과 호환됩니다.
만약 Spring Security 5.3.2 버전을 적용한다면 5.7.1 버전에 있어야 할 메서드가 존재하지 않으므로
로그에서와 같이 NoSuchMethodError가 발생합니다.
따라서 Spring Security 버전을 5.7.1로 변경 부탁드립니다.
오픈소스별 호환성은 아래 링크에서 확인 가능합니다.
https://www.egovframe.go.kr/home/sub.do?menuNo=13
2. globals.properties 설정 문제
EgovWebApplicationInitializer에서 Globals.Auth 값에 따라 로그인 방식이 분기됩니다.
만약 globals.properties 파일에서 Globals.Auth = session를 설정한다면 로그인시 Session 방식 접근 제어 방식의 로직이 동작하게 되므로
원하시는 Spring Security 방식으로 동작하지 않을 수 있습니다.
따라서 Globals.Auth = security로 설정하거나, 다른 방식으로 수정하시기 바랍니다.
표준프레임워크의 Security 설정 간소화는 아래 링크에서 확인 가능합니다.
https://www.egovframe.go.kr/wiki/doku.php?id=egovframework:rte4.1:fdl:server_security:xmlschema
3. session 방식 접근 제어에서 동작하는 로직들
표준프레임워크에서 제공하는 Spring Security 기능이 아니라 커스텀한 Spring Security 기능을 사용한다고 하더라도,
Globals.Auth = session으로 설정해 놓는다면 기본적으로 아래와 같은 로직들이 동작합니다.
- src/main/resources/egovframework/spring/com/context-egovuserdetailshelper.xml : 인증 방식(Session, Spring Security)에 따라 적용되는 설정
- src/main/webapp/WEB-INF/config/egovframework/springmvc/egov-com-access.xml : 권한관리.
- src/main/webapp/WEB-INF/config/egovframework/springmvc/egov-com-interceptor.xml : 로그인시 URL 및 로그인 여부 체크(profile="session"으로 수정했을 경우에만)
표준프레임워크의 Session 방식 접근 제어는 아래 링크에서 확인 가능합니다.
https://www.egovframe.go.kr/wiki/doku.php?id=egovframework:rte4.1:fdl:access
감사합니다.