118.131.39.199 ip 주소를 가진 서버가 있다

해당 서버는 외부접속이 허용 된 상태 일때 도메인 설정이 어떻게 이루어지는지 알아보자

 

duckdns.org에 접속하여 도메인과 공유기의 ip를 설정해준다

ex ) jung-nas.duckdns.org : 118.131.39.199

더 깊은 이해를 돕기 위해 한 예시를 들어보자

로컬서버일때 사설 ip는 여러개가 있다.

PC 192.168.0.56

노트북 192.168.57

핸드폰 192.168.0.58

이때 공유기로 요청이 들어왔을때 요청을 보내줄 사설 ip를 nginx에 설정해준다

ex) nginx : 외부 80 -> 내부 192.168.0.58 80포트

포트포워딩을 해주어 설정 한 jung-nas.duckdns.org 로 접속했을때 nginx에 설정한 사설 ip로

연결된다  

'메모' 카테고리의 다른 글

spring 설정 파일 구분  (0) 2022.07.15
maven 빌드 및 jar파일 생성  (0) 2022.07.15
readOnly과 disabled 차이  (0) 2022.07.12

HttpServletRequest의 getHeader() 메소드를 통해 클라이언트의 다양한 정보를 얻을 수 있다

 

//현재 페이지 오기 전 URL정보
request.getHeader("referer") 

​

//접속 IP
request.getHeader("host")

​

//클라이언트 브라우저 정보
request.getHeader("user-Agent")

​

//쿠키 값 가져오기
request.getHeader("cookie")

​

//클라이언트 ip 주소
request.getHeader("X-Forwarded-For")

​

​서버에서는 개발자도구에 document.referer < 명령어를 통해 알 수 있다

 

'Spring' 카테고리의 다른 글

JPA / ORM or SQL Mapper / Spring-data-JPA  (0) 2022.07.24
Spring / Security  (0) 2022.07.15
Spring / Spring Boot 에 Intercapter 란?  (0) 2022.07.14
Spring / Thymeleaf  (0) 2022.07.14

Spring Security는 보안(인증, 인가, 권한)을 담당하는 Spring 하위프레임워크이다.

Security는 Filter와 클래스들의 집합으로 이루어져있다.

인증 (Autentication)

- 현재 유저가 누구인지를 확인/ 애플리케이션의 작업을 수행할 수있는 주체인지를 증명

권한 (Authorization)

- 인증객체의 여부에 따라 애플리케이션의 동작을 수행할 수 있도록 허락되있는지는 결정

인가 (Authorize)

- 현재 유저가 어떤 서비스, 페이지에 접근할 수 있는 권한이 있는지 검사

 

Authentiction Flow(인증의 흐름)

1. Client 에서 로그인 요청

2. UsernamePasswordAuthenticationFIlter에서 ID + PASSWORD를 담은 인증객체(Authentication)를

생성한다.

3. AuthenticationManager에게 인증객체를 넘기며 인증처리를 위임한다.

→ 내부에 한 개 이상의 Provide를 담은 List를 가지고 있고 그 List에서 적절한 Provider를 찾는다.

4. 인증관리자(c)는 적절한 Provider(AuthenticationProvider)에게 인증처리를 위임한다.

5. 해당 Provider는 input 정보(id, password)를 가지고 실제 인증 처리 역할을 한다.

-a. loadUserByUsername(username)메서드를 호출해서 유저객체를 요청한다.

-b. UserDetailsService 인터페이스에게 loadUserByUsername(username) 요청

b-1.Repository에 findById() 유저 객체 조회를 한다.

b-2.만약, 해당 유저객체가 존재하지 않으면 UsernameNotFoundException이 발생하고

UsernamePasswordAuthenticationFIlter에서 예외를 처리를 한다

→ FailHandler()에서 후속처리

b-3.존재한다면 UserDetails 타입으로 반환된다.(Member 객체도 UserDetails 객체로 변환되어 반환)

6. 인증관리자(loadUserByUsername(username))는 이제 Password 검증을 시작한다.

-a. 인증객체의 Password와 반환받은 UserDetails의 Password를 비교한다.

a-1. 일치하지 않을 경우 BadCredentialException 발생 후 인증 실패

-b. 성공한 인증객체(UserDetals와 authorities를 담은 인증 후 토큰 객체 Authentication)를

UsernamePasswordAuthenticationFIlter에 전달한다.

7. SecurityContext에 저장한다.

8. 이후 전역적으로 SecurityContext에서 인증객체를 사용가능하게 된다

'Spring' 카테고리의 다른 글

JPA / ORM or SQL Mapper / Spring-data-JPA  (0) 2022.07.24
Spring / request.getHeader()  (0) 2022.07.15
Spring / Spring Boot 에 Intercapter 란?  (0) 2022.07.14
Spring / Thymeleaf  (0) 2022.07.14

보안설정

우분투 OS의 root는 기본적으로 설정되있지 않기때문에 비밀번호를 설정해준다 

$ sudo passwd root

 

ssh 접속을 허용해주는 설정파일을 변경해준다

$ sudo vi/etc/ssh/sshd_config

 

방화벽설정

기존에 UFW를 사용했다면 중지하고 iptables 프로그램을 설치해야한다

 

UFW 중지

$ ufw disable

$ iptables -F

 

iptables를 안정적으로 사용하기 위해 패키지 설치

$ apt-get install iptables-persistent netrilter-persistent

 

패키지 설치가 완료되면 /etc/iptables 폴더에 rules.v4 와 rules.v6가 생성됬는지 확인

 

설정 파일 수정

//파일 수정은 다른 블로그 참고
vi /etc/sysconfig/iptables

 

서비스 반영

service iptables save

service iptables restart

 

iptables 명령어

//현재 열려있는 포트

netstat -nap​

//80번포트를 열어두는 명령어

sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT

//데몬에 변경된 사항을 저장

sudo iptables-save > /etc/iptables/rules.v4

//iptables 정지

service iptables stop

//iptables 시작

service iptables start

 

fail2ban 해킹접속 제한

https://eungbean.github.io/2019/11/05/fail2ban/ 참고

 

Ubuntu 시간동기화

 

1. rdate설치

root@server:/opt# apt-get install rdate

2. tzdata재설정

root@server:/opt# dpkg-reconfigure tzdata

3. crontab 를 이용하여 꾸준히 시간을 동기화하는 명령어

$crontab -e

00 01 * * * /usr/bin/rdate -s time.bora.net

 

Intercapter 란?

- Intercapter 란 서버에 요청 전 후에 가로채어 제어하는 것을 의미

- HandlerIntercepter 클래스를 상속받아 사용한다



HandlerIntercepter 클래스의 세 개의 메소드

 

PreHandle

- Controller 실행 전 호출

PostHandle

- Controller 실행 후 View로 보내기 전에 호출

AfterCompletion

- View 까지 수행하고 나서 호출

 

그림을 참고해보면 Dispatcher Servlet에서 Controller를 제어하기 전에 

Intercepter 메소드를 먼저 호출 하는 것을 확인할 수있다

이러한 로직때문에 로그인한 사용자의 권한을 확인하고 처리 하는것이 가능하여

로그인처리나 권한처리에 사용되기도 한다

 

Filter와 Intercepter의 차이

 

- Filter는 요청이 들어오면 Dispatcher Servlet 전에 처리 하기 때문에

보통은 한글 처리에서 사용한다 즉, Filter와 Intercepter는 처리시점이 다르다

 





'Spring' 카테고리의 다른 글

JPA / ORM or SQL Mapper / Spring-data-JPA  (0) 2022.07.24
Spring / request.getHeader()  (0) 2022.07.15
Spring / Security  (0) 2022.07.15
Spring / Thymeleaf  (0) 2022.07.14

Thymeleaf


- porm.xml의 dependcy에 라이브러리를 주입

- XML, XHTML 및 HTML5 문서를 처리하기 위한 다목적 Java 템플릿 엔진



웹 애플리케이션에선 화면은 재사용하는 경우가 빈번하지만

데이터는 다르게 출력되는 경우가 잦아 코드가 반복적으로 사용된다

이와같이 반복적인 코드를 줄여 재사용성이 높아지면 코드가 구분되어 유지보수가 용이해

협업이 원활하게 이루어진다 그때 사용하는 라이브러리 중 하나가 Thymeleaf 이다



Thyimleaf는 다양한 태그들을 가지고 있다 예시들을 정리해보면

 


Thyimleaf attributes..

href 태그

<th: href="@{경로(파라미터변수=${파라미터값})}"/> 

ex) <th: href="@{http://localhost:8080/(파라미터변수=${파라미터값})}"/>

 


text 태그

<th:text=" 'String' "/>

<th:text=" Number "/>





escape 처리를 하고싶지않다면

<th:utext= "#{messge}"/>



파라미터값이 있다면

<th:utext= "#{messge(${파라미터명})}"/>


attr 태그

<th:attr="action=@{/mapping경로}"/>

ex) <th:attr="action=@{/list}"/>


데이터값이 문자열인 경우

th:if="${#strings.isEmpty(value)}"

 


유의점

 

include 태그 와 replace 태그 차이

- include는 태그안의 내용을 가져오고 replace는 태그도 같이 가져와서 출력한다

 

 

'Spring' 카테고리의 다른 글

JPA / ORM or SQL Mapper / Spring-data-JPA  (0) 2022.07.24
Spring / request.getHeader()  (0) 2022.07.15
Spring / Security  (0) 2022.07.15
Spring / Spring Boot 에 Intercapter 란?  (0) 2022.07.14

pom.xml 에 log4j 라이브러리를 넣어준다

https://mvnrepository.com/artifact/log4j/log4j/1.2.17 < 해당 사이트에서 다운로드

 

dependency가 추가하고 src/main/resources에 log4j.xml를 오픈

 

DTD의 경로를 못잡는고 있다고 경고 메세지가 출력된다

상단선언부를 지우고 아래 코드를 삽입

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE log4j:configuration SYSTEM "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

 

정상적으로 로드된다

 

 

'Tool' 카테고리의 다른 글

Intelij / 코드 관련 단축키  (0) 2022.07.14
Intelij / 플러그인 정리  (0) 2022.07.14

1. 코드 편집 관련 단축키

Ctrl + / : 선택한 라인 주석 처리(//로 주석처리)

Ctrl + Shift + / : 선택한 영역만큼 주석 처리(/* */ 로 주석처리)

Ctrl + Y : 커서가 위치한 라인 삭제

Ctrl + D : 현재 코드 복사하여 바로 밑에줄에 붙여넣기

Alt + Enter : Import 되지 않은 Class import 시키기

Ctrl + Alt + O : Import 최적화 시키기(코드 내에서 사용되지 않는 import 문장 삭제 처리)

Ctrl + . : 코드 접기

Ctrl + W : 가장 안쪽에 있는 괄호부터 순차적으로 선택하기

Ctrl + Shift + U : 대/소문자 변경하기

Shift + Enter : 커서가 어느 위치에 있던 한줄 밑에서 시작하기

Ctrl + Alt + Enter : 커서가 어느 위치에 있던 한줄 위에서 시작하기

Ctrl + Shift + Enter : 문장 자동 완성하기(if문, else if 문, ; 등)

Ctrl + Alt + T : 선택한 코드를 특정 구문으로 감싸기(if, if/else, while, for, try/catch 등)

Ctrl + Alt + L : 파일 내 전체 코드 재정렬하기

Ctrl + Alt + I : 커서가 위치한 코드 줄 재정렬하기

Ctrl + O : 오버라이드 매서드 구현하기

Ctrl + I : 인퍼페이스 매서드 구현하기

sout 작성 : System.out.println 자동 완성하기

serr 작성 : System.err.println 자동 완성하기

Alt + Shift + Insert : 가로/세로 편집모드로 변경하기

2. 검색/이동 관련 단축키

Ctrl + N : 전체 클래스 검색창 띄우기. 창을 띄운 후 Alt + 방향키로 Class, File, Symbol, Action 등 선택 가능

Ctrl + F : 전체 파일 검색창 띄우기. 창을 띄운 후 Alt + 방향키로 Class, File, Symbol, Action 등 선택 가능

Ctrl + E : 최근에 열었던 파일 목록 보기

Ctrl + Shift + E : 최근에 수정한 파일 목록 보기

Ctrl + Shift + F : 전체 코드에서 단어 검색하기

Ctrl + F : 소스에서 단어 검색하기

Ctrl + R : 소스에서 단어 검색 및 변경하기

Ctrl + Alt + 좌/우 방향키 : 이전/이후 포커스로 이동하기

Ctrl + G : 코드의 특정 라인으로 이동하기

Ctrl + B : 해당 코드가 정의된 곳으로 이동하기

Ctrl + Alt + B : 해당 코드가 구현된 곳으로 이동하기

Ctrl + Shift + I : 해당 코드의 Quick Definition 보기

Ctrl + Shift + B : 해당 코드 타입이 정의된 곳으로 이동

3. 화면/파일 조작 관련 단축키

Alt + 1 : Project Explorer 창으로 포커스 이동 / Project Explorer 창에 포커스가 있을 때는 Project Explorer 창 닫기

ESC : 소스 에디터 창으로 포커스 이동하기

Ctrl + Shift + F12 : 소스 에디터 창 키우기 / 줄이기

Ctrl + F4 : 열려 있는 소스 에디터 창 닫기

Ctrl + Alt + S : Setting 화면 띄우기

Alt + Insert : 포커스가 Project Explorer에 있을 경우 클래스, 파일 등 신규 생성. 포커스가 소스 에디터 창에 있을 경우 생성자, Getter/Setter 등 신규 생성하기

Shift + F6 : (파일 선택 시) 파일 이름 변경하기

Alt + F1 : Select In

4. 명령어 실행 관련 관련

Shift + F10 : 실행(Run Application)

Shift + F9 : 디버그 실행

Alt + Shift + F10 : Select Configuration & Run

Alt + Shift + F9 : Select Configuration & Debug

Ctrl + F5 : Tomcat 재기동

Ctrl + F2 : Tomcat 중지

https://twofootdog.tistory.com/84 참고

'Tool' 카테고리의 다른 글

Eclipse / log4j 라이브러리 설정  (0) 2022.07.14
Intelij / 플러그인 정리  (0) 2022.07.14

+ Recent posts