티스토리 뷰
복습
지난 https://hyunsangwon93.tistory.com/24 포스팅에서 시큐리티의 간단한 개념과 인증 순서를 배웠다.
Config 클래스와 SecurityService 클래스가 무엇인지 간단하게 추가적으로 알았지만
오늘 포스팅부터 DB모델링부터 시큐리티 설정까지 차근차근 해보겠다.
필자의 개발 환경은 전 포스팅에서 언급했으니 Keep 하겠다.
또한 프로젝트 생성 과정도 킵하겠다..
아래 포스팅 순서대로 쭈~~욱 따라하면 문제없이 시큐리티가 완성되니 시작해보자!
Maven 등록 (pom.xml)
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!--Thymeleaf --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <!--Mysql --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <!--Mybatis --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.0.1</version> </dependency> <!--Lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <!--Devtools --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <!--Security--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> </dependencies>
Lombok과 Devtools는 이번 포스팅과 연관없는 라이브러리 이지만, 개발할때 편하므로 넣어도 상관없다.
각 두개가 무엇인지 궁금하다면 이번주제가 시큐리티만큼 패스 하겠다. 궁금하다면 댓글 달아주시면
감사하겠다!
properties 혹은 yaml 파일 설정
필자는 yaml 파일로 작성을 한다. yaml 파일이 무엇인지 궁금하다면 아래 포스팅을 참고 하면 되겠다.
https://hyunsangwon93.tistory.com/22
application: version: v1.0.0 title: boot-security spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver ## initialization-mode 옵션: never, always (어플리케이션 실행시 sql파일 실행할지 안할지 여부 선택) initialization-mode: never ## sql 파일 경로 schema: classpath:init.sql url: jdbc:mysql://localhost:3306/boot-security?useUnicode=true&charaterEncoding=utf-8&serverTimezone=UTC username: password: devtools: livereload: enabled: true restart: enabled: true thymeleaf: cache: false mode: HTML ## 마이바티스 sql.xml 경로 mybatis: mapper-locations: classpath:/sqlmap/sqlmapper_*.xml
필자는 sql파일을 따로 분리한다. DDL을 따로 관리하면 유지보수 하기 편하다.
initialization-mode : never 아직 sql파일이 없으면 never 해놓자.
never는 어플리케이션 실행시 sql파일을 읽지 않겠다 라는 뜻이고,
always는 어플리케이션 실행시 sql파일을 실행 하겠다 뜻이다.
SQL 파일 작성및 바이바티스 mapper-location 폴더 생성
그리고 컨트롤러와 서비스 등등 필요한 패키지를 생성하겠다. 모두 생성하고 나면 아래 그림과 같이 보이면 되겠다.
src/main/resources 안에 SQL파일과 쿼리.xml이 생성된걸 확인할 수 있다.
이제 컨트롤러,서비스,컨피그 등등 만든 패키지 안에 아래 그림과 같이 클래스와 인터페이스 파일을 넣자
각각 무엇을 담당하는지 이어서 설명하겠다.
com.examlple.demo.config :
SecurityConfig :
스프링 시큐리티 보안,인증 설정
WebConfig :
mapper 설정
com.examlple.demo.controller :
로그인 페이지 이동 처리및 인증 페이지 처리 예정
com.examlple.demo.service :
UserDetailsService인터페이스를 구현할 예정
com.examlple.demo.mapper :
mapper 파일 namesapce 매핑 예정
com.examlple.demo.vo :
UserPrincipalVO:
UserDetails 인터페이스 구현 예정
UserVO :
login 페이지에서 받아올 객체
이렇게 기본틀이 되겠다. 진행하다보면 VO 패키지에 클래스가 더 추가될 것이다.
DB 모델링 구축
1:1 관계로 구축해도 되고 1:M 관계로 구축해도 상관없다. 어플리케이션 특징마다 다름!
즉, 한유저당 하나의 권한을 줄것이냐? 한 유저당 여러 권한을 부여할것이냐에 따라 모델링이 다르단 말씀! ....
확장성으로 고려해 한유저당 여러 권한을 주는 방법으로 모델링을 구현하겠다.
한유저당 하나의 권한으로 해버릴 경우 확장을 못한다. 모델링 다시해야됨 ㅎㅎㅎ...
모델링 구조는 아래 그림과 같은 모습이다.
유저 테이블에는 유저정보가, 권한 테이블에는 어떤 권한들이 있는지에 대한 정보,
유저 권한 테이블은 어떤 유저가 어떤 권한을 가졌는지에 대한 테이블 구조가 되겠다.
init.sql 작성
/src/main/resources/init.sql 경로에 들어가 아래 코드와 같이 입력해준다.
##DDL CREATE TABLE IF NOT EXISTS user ( user_no BIGINT AUTO_INCREMENT NOT NULL PRIMARY KEY, id VARCHAR(20) NOT NULL, password VARCHAR(100) NOT NULL, name VARCHAR(20) )ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE IF NOT EXISTS role ( role_no INT NOT NULL PRIMARY KEY, role_name varchar(20) NOT NULL )ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE IF NOT EXISTS user_role ( user_no BIGINT NOT NULL, role_no INT NOT NULL, FOREIGN KEY (user_no) REFERENCES user (user_no), FOREIGN KEY (role_no) REFERENCES role (role_no) )ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; ##DML INSERT INTO role (role_no, role_name) VALUES (1, 'ADMIN'); INSERT INTO role (role_no, role_name) VALUES (2, 'USER');
컬럼이 많지 않기때문에 코멘트는 달지않았다.
Config 클래스 설정
com.examlple.demo.config 에 있는 WebConfig클래스를 작업하겠다.
*SecurityConfig는 맨 마지막에 작성하겠다.
WebConfig.java
package com.example.demo.config;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@MapperScan(value= {"com.example.demo.mapper"})
public class WebConfig {
}
@MapperScan을 붙여 해당 경로가 mybatis mapper 경로야~ 라고 설정해준다.
sqlmapper_*.xml 수정
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.mapper.HomeMapper">
</mapper>
mapper namespace를 지정해준다.
yaml 파일 수정
yaml 에서 initialization-mode: never 모드를 always로 수정후,
어플리케이션을 실행해 테이블이 만들어 졌는지 확인하자.
initialization-mode: always
*** 실행전에 데이터베이스와 유저를 만들었는지 , DB 포트번호가 맞는지 확인하고 실행하자.
실행후 데이터베이스 테이블을 조회 하면 아래 그림과 같이 자동생성이 될것이다.
테이블 생성과 기본 설계는 되었고 이제 시큐리티를 커스텀 마이징 해보자...
이번 포스팅에서 끝내려고 했으니 [3] 시리즈를 이어서 나가야 될것같다 ㅠㅠ
ps. 지금까지 했던 작업중 궁금한 사항이 있으면 댓글 달아주세요 :)
'Spring' 카테고리의 다른 글
Spring Boot CSRF AJAX 전송 방법 (9) | 2019.08.19 |
---|---|
스프링 부트 시큐리티(spring boot security) 시작 [3] 최종 (5) | 2019.08.17 |
스프링 부트 시큐리티(spring boot security) 시작 [1] (1) | 2019.08.14 |
스프링부트 리캡챠 등록,사용 법 (1) | 2019.08.13 |
Spring boot yaml 파일 사용법 (0) | 2019.08.13 |
- Total
- Today
- Yesterday
- boot
- pcsql
- spring boot sse sample
- spring boot sse란
- aws s3 호스팅 방법
- s3 serverless
- spring boot sse 예제
- AWS
- spring
- 국내조선업
- spring boot sse구현
- spring boot sse 예제코드
- Spring Boot
- 한화오션
- SQL
- spring boot sse
- S3 웹호스팅
- 스프링 부트
- spring boot security
- s3 호스팅
- aws s3 호스팅
- AWS serverless s3
- HD현대중공업
- spring sse
- 이클립스톰캣연동#이클립스#톰캣#스프링#jsp#톰캣연동
- 조선업투자
- boot s3
- spring s3 사용법
- 스프링 부트 시큐리티
- AWS S3 웹호스팅
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |