시큐리티
허가된 사용자만이 특정 웹 페이지에 접근할 수 있도록 제한하는 보안 기능을 말함.
사용자가 웹 브라우저를 사용하여 웹 페이지에 접근할 때 JSP 컨테이너는 요청된 페이지에 보안 제약이 있는지 확인하고 사용자에게 인증(authentication)을 요청함. 이러한 인증은 일반적으로 사용자의 이름과 암호를 확인하여 수행되며, 인증되면 JSP 컨테이너는 특정 사용자가 해당 페이지에 접근할 수 있는지 확인하여 승인하는데 이를 권한 부여(authorization)라고 함.
| 시큐리티 처리 방법 | 설명 |
| 선언적 시큐리티 | 코드 작성 없이 web.xml 파일에 보안 구성을 작성하여 사용자의 인증을 수행하는 방식 |
| 프로그래밍적 시큐리티 | request 내장 객체의 메소드를 통해 사용자의 권한 부여를 처리하는 프로그래밍 방식 |
선언적 시큐리티(declarativ security)
웹 애플리케이션 배포 설명자 web.xml 파일에 보안 구성을 작성하여 수행하는 방식.
web.xml 파일에는 보안 역할, 보안 제약 사항, 인증 처리 등을 설정하여 보안을 구성함.
- 시큐리티 역할 설정하기
<security-role>
<security-role>
<role-name>역할 이름</role-name>
</security-role>
- 시큐리티 제약 사항 설정하기
<security-constraint>
| 요소 | 설명 |
| <web-resource-collection> | 웹 자원에 대한 접근을 설명 |
| <auth-constraint> | 웹 자원에 접근할 수 있는 인증된 사용자를 설정 |
| <user-data-constraint> | 데이터 전송 시 데이터 보호를 설정 |
<web-resource-collection>
| 요소 | 설명 |
| <web-resource-name> | 웹 자원의 이름을 설정하며 생략할 수 있다 |
| <url-pattern> | 접근 제한을 요청할 URL 목록을 설정한다. 자원에 대한 접근을 데한하지 않는 경우 생략 가능 |
| <http-method>또는 <http-method-omission> | http 메소드를 설정(GET 또는 POST) |
<auth-constraint>
| 요소 | 설명 |
| <description> | 권한 부여 제약 사항에 대한 설명을 기술 |
| <role-name> | 권한이 부여된 사용자의 이름을 대문자와 소문자를 구분하여 설정한다. 이때 반드시 tomcat-users.xml에 등록된 역할과 사용자여야 한다. 만약 모든 사용자에게 권한을 부여하려면 * 표시한다. <role-name>요소를 생략하면 <url-pattern> 요소에 설정된 접근 제한 URL에 대한 사용자의 요청을 허용하지 않는다. |
<user-data-constraint>
| 요소 | 설명 |
| NONE | 기본값으로 데이터를 보호하지 않겠다는 의미 |
| INTEGRAL | 전송 중 데이터가 변경되지 않았음을 보장한다는 의미(데이터 무결성) |
| CONFIDENTIAL | 전송 중 데이터를 아무도 훔쳐보지 않았음을 보장한다는 의미(기밀성) |
- 시큐리티 인증 설정하기
<login-config>
이 요소는 <security-constraint>요소에 설정된 접근 제한 자원에 사용자가 접근하는 경우 해당 자원의 접근을 위한 인증 처리 방법을 활성화하며, 사용자에게 로그인 관련 메시지를 표시할 수 있음.
| 요소 | 설명 |
| <auth-method> | 웹 자원에 대한 인증 처리 방식을 설정 |
| <realm-name> | 웹 자원에 접근할 수 있는 인증된 사용자를 설정 |
| <form-login-config> | 데이터 전송 시 데이터 보호를 설정 |
<auth-method>
| 종류 | 설명 |
| BASIC | 웹 자원을 보호하는 간단하고 일반적인 방법 |
| DIGEST | 암호화 메커니즘을 이용하여 전송한다. 많이 사용되지 않는 암호화 기법으로 JSP 컨테이너가 반드시 지원하지 않을 수도 있다. |
| FORM | 일반적인 폼 페이지를 이용하여 로그인 정보를 서버에 전송하는 방식. 암호화되지 않은 로그인 정보를 그대로 전송한다. |
| CLIENT-CERT | 클라이언트가 인증서를 가지고 공인 키 인증 방식을 사용하여 로그인하는 방식. 클라이언트가 인증서를 가지고 있어야만 로그인이 되므로 비즈니스 환경에서만 사용됨. |
FORM 기반 인증 시 로그인 페이지의 요구사항
| 속성 이름 | 속성 값 |
| form 태그의 action 속성 | j_security_check |
| 사용자의 name 속성 | j_username |
| 비밀번호의 name 속성 | j_password |
<form-login-config>
인증 처리를 위한 로그인 및 오류페이지를 설정하는 요소
| 요소 | 설명 |
| <form-login-page> | 인증을 위한 로그인 페이지를 설정 |
| <form-error-page> | 인증 실패 시 표시할 오류 페이지를 설정 |
웹 서버에 사용자와 역할 설정하는 방법.
Server 프로젝트에 있는 tomcat-users.xml파일에서 사용자와 역할의 주석 처리를 삭제하고 비밀번호를 추가 수정.
여기서 설정

<role rolename="tomcat"/>
<role rolename="role1"/>
<role rolename="admin"/>
<user username="tomcat" password="tomcat1234" roles="tomcat"/>
<user username="both" password="both1234" roles="tomcat,role1"/>
<user username="role1" password="role1234" roles="role1"/>
<user username="admin" password="admin1234" roles="admin" />
</tomcat-users>
프로그래밍적 시큐리티 (programmatic security)
웹 애플리케이션의 보안을 위해 코드를 작성하여 사용자의 권한 부여를 처리하는 방식.
선언적 시큐리티의 보안으로 충분하지 않을 때 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] 필터 (1) | 2025.12.05 |
|---|---|
| [JSP] 예외처리 (0) | 2025.12.04 |
| [JSP] 다국어 처리 (0) | 2025.12.04 |
| [JSP] 유효성 검사 (0) | 2025.12.04 |
| [JSP] 파일 업로드 (0) | 2025.12.04 |