본문 바로가기
JSP

[JSP] 시큐리티

by lmyourpearl 2025. 12. 4.

시큐리티

허가된 사용자만이 특정 웹 페이지에 접근할 수 있도록 제한하는 보안 기능을 말함.

사용자가 웹 브라우저를 사용하여 웹 페이지에 접근할 때 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