티스토리 뷰
요구사항
<maksing>
1. 게시판 혹은 댓글목록에서 사용자정보(아이디 혹은 닉네임)를 표시함에 있어 개인정보 보호 차원에서
'*' 표시로 마스킹 처리를 하자
2. 닉네임을 갖고 있다면 닉네임을 표시 ( 마스킹 처리 하지 않음)
3. 닉네임이 없다면, 아이디 표시
ㄴ 로그인한 사용자와 해당 사용자가 같다면 마스킹 처리 하지 않음
ㄴ 다른 사용자라면 마스킹처리 유틸을 사용하여 표시 (ex : tistory -> tist***)
4. 이미 구현되어 있는 자바 클래스 사용할 것(재사용) -> MaskingTagHandler
<count>
1. 조회수를 체크하는 경우와 같이 카운트를 할 때 상당히 큰 값에 대해서 제한을 두고자 함
(ex : +999999)
2. 옵션으로 콤마 설정 가능 (ex : 999,988)
기타
1. 스프링 MVC 사용
2. 마스킹처리를 하는 자바클래스를 재사용하기 위함
3. 참조 http://gwpark.tistory.com/1242
==========================================================================================
CODE
1. Contorller
@Controller
public class Practice {
private static int count = 9999888;
@RequestMapping("/home")
public ModelAndView moveToBoard() {
Map<String, Object> model = new HashMap<String, Object>();
String loginid = "nts";
model.put("loginid", loginid);
model.put("count", ++count);
return new ModelAndView("index", model);
}
@RequestMapping("/init")
public ModelAndView init() {
count = 9999888;
return new ModelAndView("redirect:/home");
}
}
2. customTaglib.tld
<?xml version="1.0" encoding="UTF-8" ?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/
http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0">
<description>개인정보(아이디) 보호를 위한 마스킹처리 태그와 MAX를 가진 숫자 태그</description>
<tlib-version>1.2</tlib-version>
<jsp-version>1.2</jsp-version>
<short-name>myTag</short-name>
<tag>
<name>count</name>
<tag-class>com.naver.jr.common.util.CountingTagHandler</tag-class>
<body-content>empty</body-content>
<attribute>
<name>number</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>max</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>comma</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
<tag>
<name>masking</name>
<tag-class>com.naver.jr.common.util.MaskingTagHandler</tag-class>
<body-content>empty</body-content>
<attribute>
<name>userid</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>loginid</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>nick</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>
3. CountingTagHandler
public class CountingTagHandler extends TagSupport {
private static final long serialVersionUID = 1692689476115851333L;
private int number;
private int max;
private boolean comma;
public int doStartTag() throws JspException {
try {
JspWriter out = pageContext.getOut();
String result = getFormattingNumber(number);
if (number > max)
result = "+" + getFormattingNumber(max);
out.print(result);
} catch (IOException e) {
e.printStackTrace();
}
return SKIP_BODY;
}
private String getFormattingNumber(int number) {
if (comma == true)
return String.format("%,d", number);
return number + "";
}
public int getNumber() {
return number;
}
public int getMax() {
return max;
}
public void setNumber(int number) {
this.number = number;
}
public void setMax(int max) {
this.max = max;
}
public static long getSerialversionuid() {
return serialVersionUID;
}
public boolean isComma() {
return comma;
}
public void setComma(boolean comma) {
this.comma = comma;
}
}
4. MaskingTagHandler
public class MaskingTagHandler extends TagSupport {
private static final long serialVersionUID = -4740988723840179195L;
private String loginid;
private String nick;
private String userid;
public int doStartTag() throws JspException {
try {
JspWriter out = pageContext.getOut();
boolean isLogin = StringUtils.equals(userid, loginid);
String user = JrUserUtil.getNicknameOrMaskedUserId(nick, isLogin,
userid);
out.print(user);
} catch (IOException e) {
e.printStackTrace();
}
return SKIP_BODY;
}
public String getLoginid() {
return loginid;
}
public String getNick() {
return nick;
}
public String getUserid() {
return userid;
}
public void setLoginid(String loginid) {
this.loginid = loginid;
}
public void setNick(String nick) {
this.nick = nick;
}
public void setUserid(String userid) {
this.userid = userid;
}
}
1. 파일구성
2. 태그 이름은 masking과 count이고 prefix로 'check'를 사용했습니다.
3. JSP 화면
'공부 > Java, JSP' 카테고리의 다른 글
[자바] HashMap이 ArrayList보다 검색과 삭제시 처리시간이 빠르다. (0) | 2014.02.25 |
---|---|
[자바] 은행 전산시스템 프로젝트 (0) | 2014.02.20 |
[자바] Stack 자료구조 구현 및 테스트 코드 (0) | 2014.01.24 |
String, StringBuffer, StringBuilder (0) | 2014.01.08 |
정렬 알고리즘 - command 패턴 및 리팩토링 적용 (0) | 2013.12.18 |