일모도원(日暮途遠) 개발자
[표준프레임워크 맥 3.10] 공통컴포넌트 환경설정 본문
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되면 그다음은 어떻게 하나? 메일로 알려주는 기능이 있나?
'스프링 > 표준프레임워크' 카테고리의 다른 글
[표준프레임워크 맥] 공통컴포넌트 (0) | 2022.06.05 |
---|---|
[표준프레임워크 맥] 샘플 웹싸이트 (경량환경 템플릿) (0) | 2022.06.04 |
[표준프레임워크 맥] 표준프레임워크용 이클립스 설치하기 (0) | 2022.06.04 |