일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- database
- 카카오 오븐
- typing test
- tuple
- Jupyter Notebook
- Python
- Oracle 18c
- oracle 11g
- Java
- MySQL
- 데이터베이스 접속
- Set
- CSV
- oracle
- SQL
- 카카오맵
- Usecase Diagram
- SEQUENCE
- Kakao Oven
- 자바
- The Network Adapter could not establish the connection
- 매일 타자연습
- python 기초
- Kakao 지도 API
- Oracle 오류
- SQL Developer
- 10fastfingers.com
- ORA-1017
- 카카오맵 API
- 유스케이스 다이어그램
- Today
- Total
Another Brain
42일차(7월 16일)_ logback, mybatis, Session, Interceptor 본문
-- 개발중 소스코드 디버그 콘솔창 출력
System.out.println("로그인 요청");
System.out.println(memberId + ", " + memberPw);
>> 개발시에는 디버그 정보 확인하는데 도움받음
>> 개발이 완료(서비스 운영) : 콘솔창에 출력...문제가 많음
## 로그처리를 위한 api
-- log4j, slf4j, logback 등
-- 표준화, 환경설정 사용, 로그 레벨 설정
-- 개발중, 운영중 환경설정만 변경 : 효율적 관리 가능
-- 로그레벨
>> 1. error : 요청 처리 오류발생 표시
>> 2. warn : 처리 가능한 문제 경고 표시
>> 3. info : 상태 정보 표시
>> 4. debug : 개발시 디버그 정보 표시
>> 5. trace : 트랙킹 상세정보 표시
-- slf4j : http://www.slf4j.org/
## 로그 사용하기
1. 로그관련 의존관계 추가
2. 환경설정 파일 작성하기
3. mybatis SQL log pretty console log 환경설정 추가 변경
-----------------------------------------
## 1. 로그관련 의존관계 추가
-----------------------------------------
<!-- https://mvnrepository.com/artifact/org.bgee.log4jdbc-log4j2/log4jdbc-log4j2-jdbc4.1 -->
<dependency>
<groupId>org.bgee.log4jdbc-log4j2</groupId>
<artifactId>log4jdbc-log4j2-jdbc4.1</artifactId>
<version>1.16</version>
</dependency>
-----------------------------------------
## 2. 환경설정 파일 작성하기
-----------------------------------------
-- 위치 : src/main/resources>
-- 파일 :
>> logback-spring.xml
>> log4jdbc.log4j2.properties : 파일명 spec.
-----------------------------------------
## 3. mybatis SQL log pretty console log 환경설정 추가 변경
-----------------------------------------
-----------------------------------------
-- application.properties
# spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver
# spring.datasource.url=jdbc:oracle:thin:@localhost:1521/xe
# oracle log4j pretty console log
spring.datasource.driver-class-name=net.sf.log4jdbc.sql.jdbcapi.DriverSpy
spring.datasource.url=jdbc:log4jdbc:oracle:thin:@localhost:1521/xe
## logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true">
<!-- Appenders -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<Pattern>%d %5p [%c] %m%n</Pattern>
</encoder>
</appender>
<appender name="console-infolog" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<Pattern>%d %5p %m%n</Pattern>
</encoder>
</appender>
<!-- Logger : base package 지정, 로그 level 설정 : TRACE, DEBUG, INFO, WARN, ERROR -->
<logger name="com.work" level="DEBUG" appender-ref="console" />
<!-- jdbc log -->
<logger name="jdbc.sqlonly" level="INFO" appender-ref="console-infolog" />
<logger name="jdbc.resultsettable" level="INFO" appender-ref="console-infolog" />
<!-- Root Logger -->
<root level="off">
<appender-ref ref="console" />
</root>
</configuration>
-----------------------------------------
## log4jdbc.log4j2.properties
-----------------------------------------
log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
log4jdbc.dump.sql.maxlinelength=0
-----------------------------------------
## Mybatis Dao Mapper SQL 수행결과 콘솔 확인하기
-----------------------------------------
-- Slf4jSpyLogDelegator 가 SQL 로그 처리
-- 콘솔 로그 예시:
2021-07-16 11:18:16,164 INFO [jdbc.sqlonly] select grade from member where member_id='user01' and member_pw='password01'
2021-07-16 11:18:16,166 INFO [jdbc.resultsettable]
|------|
|grade |
|------|
|G |
|------|
-----------------------------------------
## 클래스에서 로그 사용하기
-----------------------------------------
-- 클래스에 로거 어노테이션 선언
@Controller
@Slf4j
public class MemberController {
//System.out.println("회원가입요청"); // 개발중에 디버그 정보 출력 , 개발완료후에는 삭제..핵불편
//System.out.println(dto);
log.info("### 회원가입요청");
log.debug("### " + dto);
}
-- 로그 레벨 설정 : 개발, 운영시 변경
>> logback-spring.xml
<!-- Logger : base package 지정, 로그 level 설정 : TRACE, DEBUG, INFO, WARN, ERROR -->
<logger name="com.work" level="WARN" appender-ref="console" />
## 로그인 인증 세션처리
## 서비스 요청
-- 로그인 상관없는 요청
-- 로그인 인증 필요 요청
-- 권한 체킹
-- 로그아웃 필요 요청
## 로그인 세션처리
-- 세션정보 설정
>> 세션 인증 정보 : 아이디, 등급 + 이름, 마일리지, 도메인 객체, Map
>> 인증 : 아이디+비밀번호 : boolean
>> 권한 : 등급 : String
## 세션처리 API
-- HttpSesssion
-- Spring Security
## HttpSesssion
HttpSession session = request.getSession(boolean);
@RequestMapping("/join")
public String join(Member dto, Model model) {
//System.out.println("회원가입 요청"); // 개발중에 디버그 요청 출력. 개발 완료 후에는 지워줘야함 귀찮...
//System.out.println(dto);
log.info("### 회원가입 요청"); // "###" 을 넣어주면 가독성이 좋아짐
log.debug("###" + dto);
int result = memberService.addMember(dto);
if (result == 1) {
model.addAttribute("message", "[회원가입 성공] 로그인 후 이용하시기 바랍니다.");
return "loginForm";
} else {
model.addAttribute("message", "[회원가입 실패] 입력내용을 다시 확인하시기 바랍니다.");
}
return "result";
}
## 단축키
ctrl + shift + F : jsp, html 자동 정렬
## 로그아웃 실습
-- 로그인 인증 사용자
1. view : 로그인 서비스 화면
2. controller : logout
>> 세션객체 가져와서 세션설정정보 삭제하고 세션객체 삭제처리
>> 시작페이지 이동처리
3. service : 해당없음
4. dao mapper interface : 해당없음
5. mapper.xml : 해당없음
6. controller :
>> 응답설정 : 해당없음
>> 응답페이지 이동 : 시작페이지
7. view : 해당없음
## 현재 프로젝트에 문제점
-- 회원 인증 서비스, 관리자 전용 서비스에 대한 보안에 문제 발생
-- 인증받지 않은 사용자 url 직접 요청 :
>> http://localhost:8070/memberList
>> 전체회원정보 조회 제공됨(문제)
-- 전체회원서비스에 대한 문제점 해결
>> 로그인 인증한 관리자 권한의 회원에게만 서비스 제공
>> 로그인 인증 받지 않은 사용자는 "로그인 요청 메세지 처리"
>> 관리자가 아닌 로그인 인증 받은 사용자는 "관리자 권한 부여 요청 메세지 처리"
-- 테스트 케이스
1. 정상 : 관리자 로그인 요청
2. 비정상 :
>> 일반, 우수 회원 로그인 후 요청 : 관리자 권한 부여 오류 처리
>> 로그인하지 않고 요청 : 사용자 인증 오류 처리
'P > Web' 카테고리의 다른 글
55일차 (8월 6일)_ google Colaboratory (0) | 2021.08.06 |
---|---|
41일차(7월 15일)_ Mybatis (0) | 2021.07.15 |
39일차(7월 13일)_ Spring Boot 환경설정 (0) | 2021.07.13 |
35일차(7월 7일)_ Front DataSource (0) | 2021.07.07 |
34일차(7월 6일)_ WebUI mini-project 발표 / Servlet & JSP 개요 (0) | 2021.07.07 |