DESC

내가 보려고 쓰는 블로그

«   2026/03   »
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
Today
-
Yesterday
-
Total
-
  • Spring 커스텀 태그 활용
    JAVA 2020. 5. 12. 10:58
    반응형

    간단한 자바 소스들의 경우 모듈화하여 태그라이브러리를 지정하면 효율적이고 수정이 용이하다.

    권한체크의 태그라이브러리 활용 예제

    • 태그 정의
    package com.hailey.security.model;
    
    import javax.servlet.jsp.JspException;
    import javax.servlet.jsp.tagext.BodyTagSupport;
    
    import org.springframework.security.core.context.SecurityContextHolder;
    
    
    /**
     * 권한체크용 태그
     * @author hailey
     *
     */
    public class AuthorityTag extends BodyTagSupport {
    
      private static final long serialVersionUID = 1L;
      
      private String prgmId;
      private String authNm;
      
      public String getPrgmId() {
        return prgmId;
      }
    
      public void setPrgmId(String prgmId) {
        this.prgmId = prgmId;
      }
    
      public String getAuthNm() {
        return authNm;
      }
    
      public void setAuthNm(String authNm) {
        this.authNm = authNm;
      }
    
      @SuppressWarnings("unchecked")
      @Override
      public int doStartTag() throws JspException {
        boolean hasAuth = false;
        
        // TODO 권한체크 로직
        
        if(hasAuth) {
          return EVAL_BODY_INCLUDE;
        }
        return SKIP_BODY;
      }
    
    }

     

    • 권한 정보 매핑용 ENUM
    package com.hailey.security.model.domain;
    
    /**
     * DB 매핑을 위한 enum
     * UserProgram의 url별 접근 권한 체크용으로 사용한다.
     * @author hailey
     * */
    public enum Authority {
        SELECT("01", "SELECT")
      , UPDATE("02", "UPDATE")
      , CREATE("03", "CREATE")
      , DELETE("04", "DELETE")
      , UPLOAD("05", "UPLOAD")
      , APPROVAL("06", "APPROVAL");
    
      private String name;
      private String authDvCd;
      
      Authority(String authDvCd, String name) {
        this.authDvCd = authDvCd;
        this.name     = name;
      }
    
      public String getAuthDvCd() {
        return authDvCd;
      }
    
      public void setAuthDvCd(String authDvCd) {
        this.authDvCd = authDvCd;
      }
      
      public static final Authority getAuthority(String authDvCd) {
        Authority[] auths = Authority.values();
        for(Authority auth : auths) {
          if(auth.getAuthDvCd().equalsIgnoreCase(authDvCd)) {
            return auth;
          }
        }
        return null;
      }
      
      public static final Authority getAuthorityByName(String name) {
        return Authority.valueOf(name.toUpperCase());
      }
      
      @Override
      public String toString() {
        return this.name;
      }
    }

     

    • 태그라이브러리 정의 authority.tld
    <?xml version="1.0" encoding="UTF-8"?>  
    <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
    
    <taglib>
      <tlibversion>1.0</tlibversion>
      <jspversion>1.1</jspversion>
      <shortname>authority</shortname>
      <info>tag library</info>
    
      <tag>
        <name>authority</name> <!-- 커스텀 태그의 이름 -->
        <tagclass>com.hailey.security.model.AuthorityTag</tagclass><!-- 태그 핸들러 클래스 -->
        <bodycontent>JSP</bodycontent> <!-- 바디 부분의 컨텐츠 타입 기술. 없으면 empty로 입력 -->
        <attribute> <!-- 태그의 속성 기능을 부여 -->
          <name>prgmId</name> <!-- 속성명 -->
          <required>true</required> <!-- 필수 입력 여부 true : 필수 -->
          <rtexprvalue>false</rtexprvalue> <!-- 표현식(<%= %>) 사용 여부 -->
        </attribute>
        <attribute>
          <name>authNm</name>
          <required>true</required>
          <rtexprvalue>false</rtexprvalue>
        </attribute>
      </tag>
    </taglib>  

     

    • web.xml 에 태그라이브러리 정보 추가
    <jsp-config>
      <taglib>
        <taglib-uri>authority</taglib-uri>
        <taglib-location>/WEB-INF/taglib/authority.tld</taglib-location>
      </taglib>
      <jsp-property-group>
        <url-pattern>*.jsp</url-pattern>
        <trim-directive-whitespaces>true</trim-directive-whitespaces>
      </jsp-property-group>
    </jsp-config>

     

    • 화면 PGM01.jsp
    <%@ taglib uri="authority" prefix="auth"%>
    <script type="text/javascript">
      var authAdd = false;
      <auth:authority prgmId="PGM01" authNm="CREATE">
        authAdd = true;
      </auth:authority>
    </script>

     

    반응형

    'JAVA' 카테고리의 다른 글

    이클립스 속도 개선 eclipse.ini / Preference  (0) 2021.01.08
    Spring 다국어 적용하기  (0) 2020.05.27
    Spring DAO DTO 사용하기  (0) 2020.05.12
    Spring 전체 URL 가져오기  (0) 2020.05.12

    댓글

Customed By Hailey Gong.