1. 시큐리티: 허가된 사용자만이 특정 웹페이지에 접근할 수 있도록 제한하는 보안 기능
- 웹브라우저를 이용해 사용자가 웹페이지 요청
- JSP 컨테이너는 요청된 페이지에 보안 제약이 있는지 확인
- 사용자에게 인증(authentication) 요청(이름, 암호, ...)
- 인증 확인 및 권한 부여(authorization)
- 선언적 시큐리티, 프로그래밍적 시큐리티
1.1 톰캣(웹 서버)을 이용한 사용자와 역할 생성
- 톰캣루트/conf/tomcat-users.xml 파일
- 주석 제거 후 role 및 user 추가, 수정
2. 선언적 시큐리티
: 코드 작성 없이 web.xml 파일(웹 애플리케이션 배포 설명자)에 보안 구성을 작성햐여 사용자의 인증을 수행하는 방식
2.1 역할 설정:
<security-role> //웹 애플리케이션에 사용하는 역할을 나열하는 요소
<role-name>역할 이름</role-name> //반드시 tomecat-user.xml에 등록된 역할과 사용자여야함
</security-role>
2.2 제약 설정: 사용자 요청 URL에 대한 접근 권한 정의
<security-constaraint>// 웹 자원에 대한 접근을 설정하는 요소
<web-resource-collection>
<web-resource-name>자원 이름(생략 가능)</web-resource-name>
<url-pattern>접근 제한 URL</url-pattern>
<http-method>전송 방식(GET/POST)</http-method>
</web-resource-collection>
</security-constaraint>
<security-constaraint>
<auth-constraint> //권한이 부여된 사용자만이 웹 자원에 접근할 수 있도록 이름을 설정하는 요소
<description>설명</description> // 권한 부여 제약 사항에 대한 설명
<role-name>역할 이름</role-name> // 대소문자 구분, tomcat-user.xml에 등록된 역할과 사용자만
</auth-constraint>
</security-constaraint>
<security-constaraint>
<user-data-constraint> // 클라이언트와 서버 간 데이터 전송할 때 데이터를 보호하는 방법을 설정하는 요소
<transport-guarantee>NONE/INTERGRAL/CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constaraint>
NONE: 기본 값
INTEGRAL: 전송 중 데이터가 변경되지 않았음을 보장(무결성)
CONFIDENTIAL: 전송 중 데이터를 아무도 훔쳐보지 않았음을 보장(기밀성)
2.3 인증 설정: 인증 처릴를 위한 로그인 페이지, 오류 페이지를 호출하는 데 사용
<login-config>
<auth-method>BASIC|DIGEST|FORM|CLIENT-CERT</auth-method> // 웹 자원에 대한 인증 처리 방식 설정
<realm-name>영역 이름<realm-name> // 웹 자원에 접근할 수 있는 인증된 사용자 설정
<form-login-config> // 데이터 전송 시 데이터 보호를 설정
<form-login-page>로그인 페이지 URL<form-login-page>
<form-error-page>로그인 오류 페이지 URL</form-error-page>
</form-login-config>
</login-config>
BASIC: 웹 자원을 보호하는 간단하고 일반적인 방법
DIGEST: 암호화 메커니즘을 이용하여 전송. 많이 안씀(JSP 컨테이너가 지안 안할 수 도 있음)
FORM: 일반적인 폼 페이지를 이용해 로그인 정보를 서버에 전송하는 방식. 암호화되지 않은 로그인 정보를 그대로 전송
CLIENT-CERT: 클라이언트가 인증서를 가지고 공인 키 인증 방식을 사용하여 로그인하는 방식.
- 클라이언트가 인증서를 가지고 있어만 로그인되므로 비즈니스 환경에서만 사용
3. 프로그래밍적 시큐리티: 코드 작성, request 내장 객체의 메소드를 통해 사용자의 권한 부여를 처리하는 방식
-선언적 시큐리티의 보안으로 충분하지 않을 때
보안 관련 request 내자 객체의 메소드
메소드 | 형식 | 설명 |
getRemoteuser() | String | 사용자의 인증 상태를 반환 |
getAuthType() | String | 서블릿을 보호하는 데 사용되는 인증 방식의 이름 반환 |
isUserInRole(java.lang.String role) | boolean | 현재 인증된 사용자에게 설정된 역할이 있는지 확인 설정됨: true / 설정 안됨: false |
getProtocol() | String | 웹 브라우저의 요청 프로토콜을 가져옴 |
isSecure() | boolean | 웝 브라우저에서 https 요정으로 request가 들어왔는지 확인 https: true / http:false |
getUserPrinciple() | Principle | 현재 인증한 사용자의 이름을 포함하여 java.security.Principle 객체를 반환 |
'이전 게시물들 > JSP' 카테고리의 다른 글
[JSP] 필터 (로그 기록하기) (0) | 2020.12.09 |
---|---|
[JSP] 예외 처리 (0) | 2020.12.08 |
[JSP] 다국어 처리 (0) | 2020.12.07 |
[JSP] 디렉티브 태그(한글 출력 및 페이지 모듈화)와 액션 태그(상품 목록 표시) (0) | 2020.12.01 |
[JSP] 스크립트 태그: 시작 페이지 만들기 (0) | 2020.12.01 |