일모도원(日暮途遠) 개발자

[표준프레임워크 맥 3.10] 공통컴포넌트 환경설정 본문

스프링/표준프레임워크

[표준프레임워크 맥 3.10] 공통컴포넌트 환경설정

달님개발자 2022. 6. 5. 12:01

https://www.egovframe.go.kr/wiki/doku.php?id=egovframework:com:v3.10:init_configration 

1. 데이터베이스 설정

globals.properties 

# 운영서버 타입(WINDOWS, UNIX)
Globals.OsType = UNIX

# DB서버 타입(mysql, oracle, altibase, tibero, cubrid, maria, postgres) - datasource 및 sqlMap 파일 지정에 사용됨
Globals.DbType = mysql

# 권한 인증방식(dummy, session, security) - 사용자의 로그인시 인증 방식을 결정함
# dummy : 더미 방식으로 사용자 권한을 인증함
# session : 세션 방식으로 사용자 권한을 인증함
# security : spring security 방식으로 사용자 권한을 인증함
Globals.Auth = security

# MainPage Setting
Globals.MainPage  = /EgovContent.do

# 위저드 사용시 데이터베이스 관련 설정을 불러옴

# KISA 검증 (2019년 11월) - 중요정보 암호화
# Globals.mysql.Password 는 com01 을 암호화한 것으로 https://www.egovframe.go.kr/wiki/doku.php?id=egovframework:rte2:fdl:crypto_simplify_v3_8 참조할 것
# Globals.mysql.Password = com01 처럼 평문을 사용하려면 context-crypto.xml 에서 initial="false" crypto="false" 로 설정하고, 
# context-datasource.xml 에서 <property name="password" value="${Globals.mysql.Password}"/> 로 바꾸어 주어야 함
#mysql
Globals.mysql.DriverClassName=com.mysql.jdbc.Driver
Globals.mysql.Url=jdbc:mysql://localhost:3306/egov1
Globals.mysql.UserName =본인의 mysql 계정
Globals.mysql.Password =본인의 mysql 암호

 

 


운영서버타입은 잘모르겠다. 난 현재 맥이고, 설정은 Unix로 되어 있네.

Globals.OsType = UNIX

 

DbType별 데이터베이스 정보를 설정 한다는데 아래처럼 mysql로 되어 있다. 

Globals.DbType = mysql

 

그럼 Globals.DbType 기준으로 context-datasource.xml 파일에 설정되어 있는 Spring Pofile기능에 의하여 dataSource 빈이 활성화 된다.라고 적혀 있다. context-datasource.xml을 보자. (파일명으로 찾기 단축키 Shift + Command + R)

context-datasource.xml파일을 보면 아래와 같은 구문이 나온다.

 

 

PropertyPlaceholderConfigurer 클래스가 빈으로 등록되면 지정된 프로퍼티파일에 저장된 정보를 스프링 설정 파일에서 사용할 수 있다. (globals.properties에서 저장된 정보)

<bean id="egov.propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">

        <property name="locations">

            <list>

                <value>classpath:/egovframework/egovProps/globals.properties</value>

                <!-- value>file:/product/jeus/egovProps/globals.properties</value-->

            </list>

        </property>

    </bean>

 

globals.properties 파일의 Globals.DbType = mysql이 어떻게 context-datasource.xml파일의 <beans profile="mysql">  과 연결이 되는지는 잘 모르겠다.

 

${Globals.mysql.Url} 이 globals.properties 파일의 Globals.mysql.Url=jdbc:mysql://localhost:3306/egov1 값을 가리킨다.

<!-- MySQL -->

<beans profile="mysql">  

<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">

<property name="driverClassName" value="${Globals.mysql.DriverClassName}"/>

<property name="url" value="${Globals.mysql.Url}" />

<property name="username" value="${Globals.mysql.UserName}"/>

<property name="password" value="${Globals.mysql.Password}"/>

</bean>

</beans>

 

 

사용하는 데이타베이스를 변경하였을때는 pom.xml 에서  jdbc 드라이버에 대한 Dependency가 설정되어 있어야 한다.

<!--  mysql -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.31</version>
</dependency>
     <!-- oracle 11g driver -->
<dependency>
    <groupId>ojdbc</groupId>
    <artifactId>ojdbc</artifactId>
    <version>6-11</version>
</dependency>

 

 

2. 인증/권한방식 설정

인증/권한 방식은 표준프레임워크 3.5 이하에서는 XML로 설정했었다.
표준프레임워크 3.6이상에서는 globals.properties 설정으로 사용.
- dummy : 더미 방식으로 사용자 권한을 인증함
- session : 세션 방식으로 사용자의 권한을 인증함
- security : spring security 방식으로 사용자 권한을 인증함

globals.properties에는 아래처럼 설정되어 있다.

Globals.Auth = security

 

Servlet 3.1 도입으로 web.xml을 dynamic하게 설정 가능하여 간소화가 가능해 졌습니다. (무슨말인지 모르겠다)

 

WebApplicationInitializer 인터페이스를 구현한 egovframework.com.cmm.config.EgovWebApplicationInitializer 클래스에 의하여 설정 파일이 동적으로 설정 된다고 한다.

public interface WebApplicationInitializer {
	/**
	 * Configure the given {@link ServletContext} with any servlets, filters, listeners
	 * context-params and attributes necessary for initializing this web application. See
	 * examples {@linkplain WebApplicationInitializer above}.
	 * @param servletContext the {@code ServletContext} to initialize
	 * @throws ServletException if any call against the given {@code ServletContext}
	 * throws a {@code ServletException}
	 */
	void onStartup(ServletContext servletContext) throws ServletException;
}

EgovWebApplicationInitializer 클래스를 보면 if 문에서 Globals.Auth의 값을 보고 처리하는 문구가 있다.

(자세한 내용은 아직 모르겠다...)

public class EgovWebApplicationInitializer implements WebApplicationInitializer {
	@Override
	public void onStartup(ServletContext servletContext) throws ServletException {
		if("security".equals(EgovProperties.getProperty("Globals.Auth").trim())) {			
			//-------------------------------------------------------------
			// springSecurityFilterChain 설정
			//-------------------------------------------------------------		
			FilterRegistration.Dynamic springSecurityFilterChain = servletContext.addFilter("springSecurityFilterChain", new DelegatingFilterProxy());
			springSecurityFilterChain.addMappingForUrlPatterns(null, false, "*");
			//-------------------------------------------------------------
			// HttpSessionEventPublisher 설정
			//-------------------------------------------------------------	
			servletContext.addListener(new org.springframework.security.web.session.HttpSessionEventPublisher());			
			//-------------------------------------------------------------
			// EgovSpringSecurityLoginFilter 설정
			//-------------------------------------------------------------
			FilterRegistration.Dynamic egovSpringSecurityLoginFilter = servletContext.addFilter("egovSpringSecurityLoginFilter", new EgovSpringSecurityLoginFilter());
			//로그인 실패시 반활 될 URL설정
			egovSpringSecurityLoginFilter.setInitParameter("loginURL", "/uat/uia/egovLoginUsr.do");
			//로그인 처리 URL설정
			egovSpringSecurityLoginFilter.setInitParameter("loginProcessURL", "/uat/uia/actionLogin.do");
			//처리 Url Pattern
			egovSpringSecurityLoginFilter.addMappingForUrlPatterns(null, false, "*.do");			
			//-------------------------------------------------------------
			// EgovSpringSecurityLogoutFilter 설정
			//-------------------------------------------------------------	
			FilterRegistration.Dynamic egovSpringSecurityLogoutFilter = servletContext.addFilter("egovSpringSecurityLogoutFilter", new EgovSpringSecurityLogoutFilter());
			egovSpringSecurityLogoutFilter.addMappingForUrlPatterns(null, false, "/uat/uia/actionLogout.do");		
		} else if("session".equals(EgovProperties.getProperty("Globals.Auth").trim())) {
			//-------------------------------------------------------------
			// EgovLoginPolicyFilter 설정
			//-------------------------------------------------------------	
			FilterRegistration.Dynamic egovLoginPolicyFilter = servletContext.addFilter("LoginPolicyFilter", new EgovLoginPolicyFilter());
			egovLoginPolicyFilter.addMappingForUrlPatterns(null, false, "/uat/uia/actionLogin.do");			
		}
.
.
.
	}
	
}

 

3. 로그인 인증 제한

표준프레임워크 공통컴포넌트 3.9은 무차별적인 로그인 시도에 대해 개인계정 취약점 강화를 위한 차단 기능을 제공한다. Globals.login.Lock에 true/false를 통해 사용/미사용 적용이 가능하며, 인증 시도 횟수 또한 Globals.login.LockCount에 value를 입력하여 설정이 가능하다.

  • Globals.login.Lock 의 default value = true
  • Globals.login.LockCount 의 default value = 5
# 로그인 인증 제한(login authentication limit)
# (사용 여부 설정값 : true, false)
Globals.login.Lock = true
# -인증 재시도 횟수
Globals.login.LockCount = 5

인증 재시도 5회이상 되어서 로그인이 Lock되면 그다음은 어떻게 하나? 메일로 알려주는 기능이 있나?