전자정부 표준프레임워크를 다운로드 하고 환경설정! 은 아래링크 글에서 설명했다.
https://minah-workmemory.tistory.com/21
eGov(전자정부 표준프레임워크) 3.10.0 시작하기
공식사이트 주소: https://www.egovframe.go.kr/wiki/doku.php?id=egovframework:dev3.10:gettingstarted 0. 개발 환경 정보 OS - Windows 10, 7 이상 JDK - Java SE SDK 7.0 이상 IDE - Eclipse 4.16.0 / JDK..
minah-workmemory.tistory.com
전자정부 표준프레임워크 공식 사이트 spring security architecture:
https://www.egovframe.go.kr/wiki/doku.php?id=egovframework:rte:fdl:server_security:architecture
전자정부 개발프레임워크의 Server Security는 컨테이너 기동시 적용되는 XML 기반 인증이 아닌 실시간 적용되는 DB기반의 JDBC 인증을 사용한다.
1. spring security 의존성 추가
※참고로 나는 Maven 프로젝트이다!!!!!
Spring Security 공식사이트: https://docs.spring.io/spring-security/site/docs/4.2.13.RELEASE/reference/htmlsingle/#maven
pom.xml
상단에 <properties> 태그안에 <security.version> ... 추가 + 아래의 dependency를 추가
<properties>
<spring.maven.artifact.version>4.3.25.RELEASE</spring.maven.artifact.version>
<egovframework.rte.version>3.10.0</egovframework.rte.version>
<security.version>4.2.3.RELEASE</security.version>
</properties>
<!-- ... other repository ... -->
<dependencies>
<!-- ... other dependency elements ... -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId>
<version>${security.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>${security.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>${security.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-taglibs</artifactId>
<version>${security.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-test</artifactId>
<version>${security.version}</version>
</dependency>
</dependencies>
web.xml src/main/webapp/WEB-INF/web.xml
<!--보안 절차를 위해서는 모든 요청이 spring security 필터를 걸쳐가도록 함-->
<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>
<!--spring 폴더안에 context- 로 시작하는 xml을 읽을 수 있게 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:egovframework/spring/context-*.xml</param-value>
</context-param>
context-security.xml 파일 추가 src/main/resources/egovframework/spring/context-security.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<http auto-config="true" use-expressions="false">
<intercept-url pattern="/**" access="ROLE_ADMIN" />
</http>
<authentication-manager>
<authentication-provider>
<user-service>
<user name="admin" password="admin" authorities="ROLE_ADMIN"/>
<user name="user" password="user" authorities="ROLE_USER"/>
</user-service>
</authentication-provider>
</authentication-manager>
</beans:beans>
※ filter 를 추가한 후에, maven > update project 를 한 후에 서버를 실행해서 화면을 보면 아래와 같이 나오는걸 확인할 수 있다. (기본으로 spring security 에서 제공하는 화면)
intercept-url 에서 모든 /** url 은 "ROLE_ADMIN"만 접근 할 수 있게 해놨기 때문에, user로 로그인하면 아래와 같은 승인을 거부했다는 화면이 뜬다.
※ Spring Security 버전 4 이후 부터는 모든 비밀번호는 암호화를 해야한 사용이 가능하다고 하니 만약 로그인이 안된다면, password="{noop}user" 이런색으로 {noop} 을 넣어주자 -> 암호화를 사용하지 않겠다는 의미
2. MyBatis를 이용하여 DB연동
xml 에 계정과 비밀번호를 직접 등록하지 않고, DB속에서 계정정보를 조회하여 로그인하는 방법을 구현해보자.
전자정부 표준프레임워크 공식사이트 MyBatis 적용 가이드 :
https://www.egovframe.go.kr/wiki/doku.php?id=egovframework:rte2:psl:dataaccess:mybatisguide
mybatis-spring 연동: http://mybatis.org/spring/getting-started.html
pom.xml 버전 변경 & 의존성 추가
<!-- mysql이나 oracle DB 사용시 아래 설정 추가 -->
<dependency>
<groupId>com.googlecode.log4jdbc</groupId>
<artifactId>log4jdbc</artifactId>
<version>1.2</version>
<exclusions>
<exclusion>
<artifactId>slf4j-api</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mariadb.jdbc/mariadb-java-client -->
<dependency>
<groupId>org.mariadb.jdbc</groupId>
<artifactId>mariadb-java-client</artifactId>
<version>2.7.2</version>
</dependency>
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.31</version>
</dependency>
<!-- mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.4</version>
</dependency>
<!-- mybatis-spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.2.1</version>
</dependency>
<!-- SQL 로그를 보기 위한 라이브러리 -->
<dependency>
<groupId>org.bgee.log4jdbc-log4j2</groupId>
<artifactId>log4jdbc-log4j2-jdbc4</artifactId>
<version>1.16</version>
</dependency>
mariaDB 를 사용할 것 이기 때문에 mariaDB 의 의존성이 추가되어있음
context-mapper.xml 설정
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">
<!-- SqlSession setup for MyBatis Database Layer -->
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<!-- vo bean에 저장해두기 위한 property -->
<!-- <property name="configLocation" value="classpath:/egovframework/sqlmap/config/sql-mapper-config.xml" /> -->
<property name="mapperLocations" value="classpath:/egovframework/sqlmap/mappers/*.xml" />
</bean>
<!-- MapperConfigurer setup for MyBatis Database Layer with @Mapper("deptMapper") in DeptMapper Interface -->
<bean class="egovframework.rte.psl.dataaccess.mapper.MapperConfigurer">
<property name="basePackage" value="egovframework.example.sample.service.impl" />
</bean>
</beans>
이미 생성되어있는 내용이다.
mybatis 를 사용할때 Mapper에 대한 정의들을 넣어두는 파일이다. 설명을 조금 붙이자면, 나는 VO를 따로 지정해서 하지않고 HashMap으로 데이터를 받아올 예정이라 propery name="configLocation"을 주석처리했다. 하지만 VO를 지정해서 사용하고 싶다면, sqlmap/config 폴더를 생성해서 아래와 같이 지정해 두면된다!
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<typeAliases>
<typeAlias alias="empVO" type="egovframework.sample.emp.service.EmpVO" />
<typeAlias alias="deptVO" type="egovframework.sample.dept.service.DeptVO" />
<typeAlias alias="searchVO" type="egovframework.sample.common.SearchVO" />
</typeAliases>
</configuration>
name="mapperLocations" 는 말그대로 실제로 실행될 쿼리들을 모아둔 xml파일들의 디렉토리를 지정해둔것이다. 맨 아래의 name="basePackage"는 위에 설명처럼 @Mapper 어노테이션을 가진 인터페이스의 자바 파일 디렉토리를 지정해둔것이다. mapperLocations 에 지정해 둔 것 처럼 sqlmap 폴더안에 mappers 폴더를 생성했다.
DB 생성
HeidiSQL (mariaDB) 에 데이터베이스 생성 (생성했다는 가정하에 진행하겠다. 참고는 아래 링크를 이용!):
https://minah-workmemory.tistory.com/22?category=1000459
HeidiSQL 에서 데이터베이스 생성, 테이블 생성
HeidiSQL (mariaDB) root로 접속한 후, 생성한 데이터베이스를 새로운 session 에 넣어주자. '사용자' 에는 아이디를 '암호'에는 비밀번호를 설정한 대로 넣어준다. 그러면 데이터베이스 쪽에 삼각형을 누
minah-workmemory.tistory.com
context-datasource.xml 에 hsql 이 있던 것을 넣어준다. 물론 본인의 DB 정보를 넣어줌.
(테스트 실행용은 주석처리!)
※ 나는 log4jdbc를 사용하고 싶어서 driverClassName 에 mariadb가 아닌거다. 만약 그렇지 않으면 driverClassName 에 "com.maradb.jdbc.Driver" 을 넣어주면 된다.
그 다음 글에서 Controller, Mapper, Service, ServiceImpl, DAO, VO 등을 생성해서 연결해보자!