티스토리 뷰

정리 노트

10주차-2일

eyoadgkn 2023. 12. 12. 17:41

다국어 처리
JSTL fmt 태그를 이용한 다국어 처리


JSTL fmt 태그는 다국어 문서 처리를 위한 국제화 및 지역화 태그입니다. 날짜와 숫자 등을 형식 화하는 기능을 제공하는 JSTL 라이브러리 JSTL fmt 태그는 특정 지역에 따라 다른 메세지를 출력할 때 사용합니다.

이렇게 JSTL fmt 태그는 중복 작업을 없애고 하나의 JSP 페이지에서 다양한 언어에 맞는 메세지를 출력합니다. JSTL fmt 태그 라이브러리를 사용하려면 다음과 같이 JSP 페이지에 taglib 디렉티브 태그로 서식 라이브러리를 포함해야합니다. 그리고 JSTL 라이브러리인 jstl.jar 파일이 필요합니다.

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> //fmt를 해석할 수 있게끔 도와주는 코드

JSTL fmt 태그의 종류

Locale 설정 setLocale - 로케일을 설정합니다.
requestEncoding-요청 파라미터의 문자 인코딩을 설정합니다.


메세지 처리
bundle-사용할 리소스번들을 설정합니다.
message-리소스번들에서 로케일에 맞는 메세지를 가져와 출력합니다.
setBundle-리소스번들을 읽어와 특정 변수에 저장합니다.

날짜
-formatDate-날짜형식을 표현.
parseDate- 문자열에서 원하는 패턴의 날짜 형식으로 변환합니다.

숫자
parseNumber-문자열에서 원하는 패턴의 숫자형식으로 변환합니다.
formatNumber-숫자형식을 표현합니다.

시간
setTimeZone-특정 범위의 시간대를 설정합니다.
timeZone-시간대를 설정합니다.

로케일 설정 태그의 기능과 사용법

setLocale 태그 -국제화 태그가 사용할 로케일을 설정하는 태그로 setLocale 태그는 다국어를 지원하는 웹 페이지를 만들 때 리소스번들인 .properties 파일과 연계하여 사용합니다.

<fmt:setLocale value="언어 코드" scope="{page|request|session|appliction}" /> //기본값은 page

value 속성 값에서 언어코드는 두 글자로 된 소문자로써 필수이고, 국가 코드는 두 글자로 된 대문자로써 추가 설정을 합니다. ★언어코드와 국가코드를 모두 설정하려면 붙임표(-)나 밑줄(_)로 구분해야 합니다.

requestEncoding 태그 -요청 파라미터의 문자 인코딩을 설정하는 태그로 request 내장 객체의 setChararcterEncoding() 메서드와 동일한 역할을 합니다.

<fmt:requestEncoding value="문자 인코딩"/>

메세지 처리 태그의 기능과 사용법

리소스 번들
: 리소스번들은 메세지 처리 태그에서 사용하는 파일로 메세지 번들이라고도 합니다. 리소스 번들로 사용하는 파일은 보통  WEB-INF/classes/ 폴더에 있습니다. 리소스번들은 java.util.Properties 클래스에 정의된 방법으로 메세지를 읽어오기 때문에 확장자가 properties 파일이 반드시 존재해야합니다. java.util.Properties 클래스는 알파벳, 숫자, 라틴문자외에는 모두 유니코드로 값을 처리합니다.

.properties 파일 설명
파일이름.properties 기본 메세지일 때 사용.
파일이름_ko.properties 한글 메세지일 때 사용.
파일이름_en.properties 영어 메세지일 때 사용.

bundle 태그
: 사용할 리소스 번들을 설정하는 태그로 리소스번들로 사용할 .properties 파일을 읽어오는 역할을 하며 message 태그와 함께 사용합니다.

<fmt:bundle basename="리소스번들" prefix="key 이름"></fmt:bundle>
*basename = 확장자 properties 파일.
*prefix=bundle 태그 내부에서 사용되는 message 태그의 key 속성값 앞에 자동으로 붙는 문자열을 의미.

message 태그
: bundle 태그에 설정한 리소스 번들에서 메세지를 읽어와 출력하는 태그입니다.

<fmt:message key="메세지 key 이름" bundle="setBundle 태그 변수명" var="메세지 저장하는 변수명" scope="4개 중 하나"

setBundle 태그
: 리소스번들을 가져와 변수로 저장한 후  JSP 페이지 어디에서나 사용할 수 있는 태그입니다. 이 태그는 bundle 태그를 대체해 사용할 수 있습니다.

<fmt:setBundle basename="리소스번들" var="리소스번들을 저장할 변수명" scope="4개중 하나(기본값 page)"

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
   <p>-----기본 로케일-----
   <fmt:setLocale value="ko"/>
      <fmt:setBundle basename="bundle/myBundle" var="resourceBundle"/>
   <p> 제목 : <fmt:message key="title" bundle="${resourceBundle}"/>
   <p> <fmt:message key="username" var="userMsg" bundle="${resourceBundle}"/>
      이름 : ${userMsg}
   <p>-----영문 로케일-----
      <fmt:setLocale value="en"/>
      <fmt:setBundle basename="bundle/myBundle" var="resourceBundle"/>
   <p> 제목 : <fmt:message key="title" bundle="${resourceBundle}"/>
   <p> 이름 : <fmt:message key="username" bundle="${resourceBundle}"/>
</body>
</html>
title=Java Server Pages
username=admin
password=1234
title =자바 서버 페이지
username=\uAD00\uB9AC\uC790
password=1234

 

숫자 태그의 기능과 사용법

formatNumber 태그
:숫자를 형식에 맞춰서 출력하는 태그

parseNumber 태그
: formatNumber 태그와 반대로 사용자가 설정한 패턴 문자열에서 숫자를 추출하는 태그.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<p> 숫자 : <fmt:formatNumber value="3200100"/>
	<!-- type=숫자로 -->
	<p> <fmt:formatNumber value="3200100" type="number"/>
	<!-- type=숫자로 groupingUsed는 없이 출력 -->
	<p> <fmt:formatNumber value="3200100" type="number" groupingUsed="false"/>
	<!-- type=currency(원화표기) gorupingUsered있게 출력 -->
	<p> <fmt:formatNumber value="3200100" type="currency" groupingUsed="true"/>
	<!-- type=cerrency(원화표기) cerrencySimbol을 &로 표기 -->
	<p> <fmt:formatNumber value="3200100" type="currency" groupingUsed="&"/>
	<!-- percent로 표시 -->
	<p> <fmt:formatNumber value="0.45" type="percent" />
	<!-- 최대 10자리까지, 소숫점 2번째까지 표기되게끔 출력 -->
	<p> <fmt:formatNumber value="3200100" minIntegerDigits="10" minFractionDigits="2"/>
	<!-- pattern처럼 표기 -->
	<p> <fmt:formatNumber value="3200100.45" pattern=".000"/>
	<!-- pattern으로 표기 -->
	<p> <fmt:formatNumber value="3200100.456" pattern="#,#00.0#"/>
	
</body>
</html>

날짜 태그의 기능과 사용법

formatDate태그
:날짜 정보를 담고 있는 객체를 형식화해 출력하는 태그입니다.

parseDate태그
:문자열로 표시된 날짜와 시간 값을 java.util.Date로 변환하는 태그입니다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<p> 숫자 : <fmt:formatNumber value="3200100"/>
	<!-- type=숫자로 -->
	<p> <fmt:formatNumber value="3200100" type="number"/>
	<!-- type=숫자로 groupingUsed는 없이 출력 -->
	<p> <fmt:formatNumber value="3200100" type="number" groupingUsed="false"/>
	<!-- type=currency(원화표기) gorupingUsered있게 출력 -->
	<p> <fmt:formatNumber value="3200100" type="currency" groupingUsed="true"/>
	<!-- type=cerrency(원화표기) cerrencySimbol을 &로 표기 -->
	<p> <fmt:formatNumber value="3200100" type="currency" groupingUsed="&"/>
	<!-- percent로 표시 -->
	<p> <fmt:formatNumber value="0.45" type="percent" />
	<!-- 최대 10자리까지, 소숫점 2번째까지 표기되게끔 출력 -->
	<p> <fmt:formatNumber value="3200100" minIntegerDigits="10" minFractionDigits="2"/>
	<!-- pattern처럼 표기 -->
	<p> <fmt:formatNumber value="3200100.45" pattern=".000"/>
	<!-- pattern으로 표기 -->
	<p> <fmt:formatNumber value="3200100.456" pattern="#,#00.0#"/>
	
</body>
</html>

시간 태그의 기능과 사용법

timeZone 태그
: 시간대별로 시간을 처리하는 태그입니다.

setTimeZone태그
: 특정 영역 범위의 시간대별로 시간을 처리하는 태그입니다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<jsp:useBean id="now" class="java.util.Date"/>
	<p> 한국 : <fmt:formatDate value="${now }" type="both" dateStyle="full" timeStyle="full"/>
	<p> <fmt:timeZone value="America/New_York">
			뉴욕:<fmt:formatDate value="${now }" type="both"
			dateStyle="full" timeStyle="full"/>
		</fmt:timeZone>
	<p> <fmt:timeZone value="Europe/London">
			런던:<fmt:formatDate value="${now }" type="both"
			dateStyle="full" timeStyle="full"/>
		</fmt:timeZone>
</body>
</html>

시큐리티

시큐리티는 허가된 사용자만이 특정 웹 페이지에 접근할 수 있도록 제한하는 보안 기능을 말합니다. 웹 페이지에 사용자가 접근을 할 때 JSP 컨테이너는 요청된 페이지에 보안 제약이 있는지 확인하고 사용자에게 첫번째로 인증을 요청합니다. 이때 인증에 이름과 암호를 확인하여 수행되는데, 인증이 된다면 JSP 컨테이너는 승인을 하여 두번째로 권한을 부여합니다. 

시큐리티의 사용하는 이유로 사용자가 권한이 없는 데이터에 접근하는 것을 막거나 웹 공격자가 전송 데이터를 중간에 가로채는 것을 방지하는 등 중요한 역할을 합니다.

시큐리티 처리 방법

웹 애플리케이션 보안에는 두가지 방법이 있습니다.

시큐리티 처리방법 설명
선언적 시큐리티 코드 작성 없이 web.xml 파일에 보안 구성을 작성해 사용자의 인증을 수행하는 방식입니다.
프로그래밍적 시큐리티  request 내장 객체의 메서드를 통해 사용자의 권한 부여를 처리하는 프로그래밍 방식입니다.
웹 서버에 역할과 사용자 구성

해당 코드에 처리된 주석을 없애고 간단한 예제를 하기 위한 비밀번호 변경 상태.

tomcat-user.xml 파일을 보면 2개의 역할인 tomcat,role1 을 가지고 3개의 사용자 tomcat,both,role1 이 서로 다른 역할에 매핑됩니다. 이때 both 사용자는 2개의 역할로 tomcat, role1에 매핑됩니다. 

선언적 시큐리티 처리

선언적 시큐리티는 웹 애플리케이션 배포 설명자 web.xml 파일에 보안 구성을 작성해 수행하는 방식입니다. 보안을 달성하기 위해서 별도의 코드 작성없이 web.xml 파일에 보안 구성을 작성함으로써 사용자가 웹페이지에 접근을 할 수 있게 합니다. 

시큐리티 역할 설정하기

<security-role>은 웹 애플리케이션에 사용하는 역할을 나열하는 요소입니다.

<security-role>
    <role-name>역할 이름</role-name>
<security-role>
*여기서 role-name 요소에 설정하는 역할 이름은 반드시 tomcat-users.xml  에 등록된 역할과 사용자여야합니다.

시큐리티 제약 사항(security constraint) 설정하기

사용자의 요청 URL 에 대한 접근 권한을 정의하는데 사용합니다.

securiry-constraint를 구성하는 하위요소  
요소 설명
<web-resource-collection> 웹 자원에 대한 접근을 설정합니다.
<auth-constraint> 웹 자원에 접근할 수 있는 인증된 사용자를 설정합니다.
<user-data-constraint> 데이터 전송 시 데이터 보호를 설정합니다.

<web-resource-collection>요소

요소 설명
<web-resource-name> 웹 자원의 이름을 설정해 생략할 수 있습니다.
<url-pattern> 접근 제한을 요청할 URL 목록을 설정합니다. 자원에 대한 접근을 제한하지 않는 경우 생략할 수 있습니다.
<http-method> or <http-method-omisstion> http 메서드를 설정합니다(GET or POST)

 

시큐리티 인증 설정하기

시큐리티 인증은 인증 처리를 위한 로그인 페이지나 오류 페이지를 호출하는 데 사용됩니다. 

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기반 인증 로그인 페이지 예)
<form action="j_security_check" method="post"
     아이디: <input type="text" name="j_username">
     비밀번호:<input type="password" name="j_password">
     <input type="submit" value="로그인">
</form>

<!-- 1번 일반 방식 -->
<!--  <security-role>
	<role-name>role1</role-name>	
</security-role>
<security-constraint>
	<web-resource-collection>
		<web-resource-name>JSPBook</web-resource-name>
		<url-pattern>/ch10/security01.jsp</url-pattern>
		<http-method>GET</http-method>
	</web-resource-collection>
	<auth-constraint>
		<description></description>
		<role-name>manager</role-name>
	</auth-constraint>
</security-constraint>
<login-config>
	<auth-method>BASIC</auth-method>
</login-config>  -->

<!-- 2번 form -->
<!--  <security-role>
	<role-name>role1</role-name>	
</security-role>
<security-constraint>
	<web-resource-collection>
		<web-resource-name>JSPBook</web-resource-name>
		<url-pattern>/ch10/security01.jsp</url-pattern>
		<http-method>GET</http-method>
	</web-resource-collection>
	<auth-constraint>
		<description></description>
		<role-name>manager</role-name>
	</auth-constraint>
</security-constraint>
<login-config>
	<auth-method>FORM</auth-method>
	<form-login-config>
		<form-login-page>/ch10/login.jsp</form-login-page>
		<form-error-page>/ch10/login_failed.jsp</form-error-page>
	</form-login-config>
</login-config> -->
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<p>인증 성공했습니다.
</body>
</html>

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form name="loginForm" action="j_security_check" method="post">
		<p> 사용자명:<input type="text" name="j_username">
		<p> 비밀번호:<input type="password" name="j_password">
		<p> <input type="submit" value="전송">
	</form>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<p>인증 실패했습니다.
</body>
</html>

설정한 사용자명과 비밀번호 올바르게 입력시.
사용자명과 비밀번호 다르게 적을시.

 

'정리 노트' 카테고리의 다른 글

10주차-5일 slide  (0) 2023.12.15
10주차-3일  (0) 2023.12.13
8주차-1일  (0) 2023.11.27
7주차-5일  (0) 2023.11.25
7주차-4  (0) 2023.11.23
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함