프로그래밍 공부

2025.02.17 JSP 공부

3452 2025. 2. 17. 17:44

시큐리티

 

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

 

클라이언트가 웹브라우저를 이용해 웹페이지에 접근 할 때 보안제약이 있는지 확인하고 사용자에게 인증(로그인)을 요청하고 특정 사용자가 웹페이지에 접근 할 수 있는지를 웹페이지가 확인하여 승인하는데 이를 권한부여라고 한다.

 

시큐리티의 처리 방법

 

선언적 시큐리티와 프로그래밍적 시큐리티가 있다.

 

선언적 시큐리티는 코드 작성 없이 web.xml 파일에 보안 구성을 작성하는 방법이고

 

프로그래밍적 시큐리티는 request 내장 객체의 메서드를 통해 권한 부여를 처리한다.

 

이 둘의 차이는 객체 생성의 시점이 선언적 시큐리티는 프로그램 실행과 동시에 생성되며, 프로그래밍적 시큐리티는 필요할때 마다 그때그때 만들어 쓴다는 점이다.

 

 

선언적 시큐리티 처리

 

선언적 시큐리티 처리를 하기 위해서는 먼저 프로젝트의 web.xml 파일을 만들어야 한다.

 

프로젝트에 우클릭 > java EE tools > Generate Deployment Descriptor Stub을 눌러 web.xml 파일을 만든다.

 

xml 파일은 WEB-INF 폴더 내에 만들어진다.

 

web.xml 파일을 연 후에 <welcom-file-list> 아래에 요소들을 추가하여 시큐리티 처리한다.

 

 

1. 시큐리티 역할 정하기

 

<security-role>

      <role-name>역할 이름</role-name>

</security-role>

 

이 역할에 해당하는 사용자만 접근할수 있도록 한다.

(역할은 tomcat-user.xml에 등록된 역할과 사용자여야 한다.)

 

2. 시큐리티 제약 사항 설정하기

 

<security-constraint>

      <web-resource-collector>웹 자원 접근 설정</web-resource-collector>

      <auth-constraint>웹 자원에 접근 가능한 인증된 사용자 설정</auth-constraint>

      <user-data-constraint>데이터 전송시 데이터 보호 설정</user-data-constraint>

</security-constraint>

 

<web-resource-collection>

      <web-resource-name>자원 이름</web-resource-name>

      <utl-pattern>접근 제한 url</utl-pattern>

      <http-method>전송 방식</http-method>

</web-resource-collection>

 

<auth-constraint>

      <description>설명</description>

      <role-name>역할 이름</role-name>

</auth-constraint>

 

auth-constraint에서 roll-name은 인증과 권한을 연결하는 역할을 한다.

 

<user-data-constraint>

      <transport-guarantee>데이터 보호방식 설정</transport-guarantee>  

</user-data-constraint>

 

위의 코드들은 security-constraint 안에 들어가는 요소들로, 이를 이용하여 제약 사항을 설정한다.

 

3. 시큐리티 인증 설정하기

 

<login-config>

      <auth-method>웹 자원에 대한 인증 처리방식 설정</auth-method>

      < realm-name>영역 이름</realm-name>

      <form-login-config>데이터 전송 시 데이터 보호 설정</form-login-config>

</login-config>

 

auth-method에 BASIC 또는 FORM을 많이 쓰이며 그중에서도 FORM이 가장 많이 쓰인다.

 

렐름네임은 단순히 영역의 이름이며 데이터를 문서화 하는데 쓰인다.

 

폼 로그인 콘피그는 폼방식에서 쓰이며 인증 성공시와 실패시 페이지를 설정한다.

 

 

위의 방법을 통해서 선언적 시큐리티 처리를 할수있다.

 

 

프로그래밍적 시큐리티 처리

 

프로그래밍적 시큐리티 처리는 간단하게 말하면 사용자에게 권한이 없으면 <a> 태그를 주지 않고 접근 자체를 못하게 막는 방식이다.

 

request의 내장 메서드 중 isUserInRole() 메서드를 통해 유저의 아이디가 서버 xml 파일 안에 있는지 확인하고 있으면 권한을 주고 없으면 주지않는 방식으로 간단하게 사용할수 있다.

 

 

 

예외처리

 

유저로 인해 발생한 문제에 대해서 프로그램을 중지시키지 않고 예외를 발생시켜서 다른 페이지로 보내버리는 방법이다.

 

디렉티브 태그를 이용한 예외처리 방법

 

<%@ page errorPAge = "error.jsp" %> 예외발생시 이동할 페이지 설정

<%

      String value = session.getAttribute("id").toString(); 만든적 없는 id 값 요청 / 오류발생

%>

 

존재하지 않는 id를 요청하여 오류가 발생했을때 디렉티브 태그로 미리 설정해둔 에러페이지 error.jsp로 이동시켜 오류로 프로그램이 중지되는 것을 막는다.

 

 

isErrorPage 속성으로 오류페이지 만들기

 

<%@ page isErrorPage = "true" %>

 

isErrorPage = "true"로 설정하게 되면 해당 페이지에 exception 내장 객체를 사용할수 있게 되고

 

이를 이용해 예외처리를 할수있게된다.

 

<%@ page isErrorPage = "true" %>

 

<p> 오류가 발생했습니다.

<p> 예외 유형 : <%= exception.toString() %>

 

오류가 발생하면 오류가 발생했다는 문구와 함께 어떤 오류인지 알려주게된다.

 

이로써 해당 페이지를 예외처리용 페이지로 사용할수 있다.

'프로그래밍 공부' 카테고리의 다른 글

2025.02.19 JSP 공부  (0) 2025.02.19
2025.02.18 JSP 공부  (0) 2025.02.18
2025.02.14 JSP 공부  (0) 2025.02.14
2025.02.13 JSP 공부  (0) 2025.02.13
2025.02.12 JSP 공부  (0) 2025.02.12