1. 程式人生 > >springboot 自定義許可權標籤(tld),在freemarker引用

springboot 自定義許可權標籤(tld),在freemarker引用

第一步:引入jar包

        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.2.1-b03</version>
        </dependency>  

第二步:自定義標籤類

import java.util.Map;
import java.util.Set;

import
javax.servlet.http.HttpServletRequest; import org.jasig.cas.client.authentication.AttributePrincipal; import org.springframework.web.servlet.tags.RequestContextAwareTag; import com.goodidea.sso.dto.PrivilegesDto; import com.goodidea.sso.dto.ResourcesDto; import com.goodidea.sso.service.PrivilegesService; /** * * @ClassName
: PrivilegeTag * @Description: 許可權標籤類 * @author lsg * @date 2017年9月12日 下午5:36:01 * */
public class PrivilegeTag extends RequestContextAwareTag{ private static final long serialVersionUID = 534416848523276042L; private String menuAlias; private String priAlias; public String getMenuAlias
() { return menuAlias; } public void setMenuAlias(String menuAlias) { this.menuAlias = menuAlias; } public String getPriAlias() { return priAlias; } public void setPriAlias(String priAlias) { this.priAlias = priAlias; } @Override protected int doStartTagInternal() { // TODO Auto-generated method stub boolean result = false; try { HttpServletRequest request = (HttpServletRequest) pageContext.getRequest(); AttributePrincipal principal = (AttributePrincipal)request.getUserPrincipal(); Map<String, Object> attributes = principal.getAttributes(); String username=(String) attributes.get("username"); PrivilegesService privilegesService= (PrivilegesService)this.getRequestContext().getWebApplicationContext().getBean("privilegesServiceImpl"); Set<ResourcesDto> dto = privilegesService.findResourcesByUsername(username); for (ResourcesDto resourcesDto : dto) { if(this.menuAlias.equals(resourcesDto.getAlias())){ for (PrivilegesDto pdto : resourcesDto.getPrivileges()) { if(this.priAlias.equals(pdto.getAlias())){ result = true; } } } } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); result =false; } return result? EVAL_BODY_INCLUDE : SKIP_BODY; } }

第三步:建立tld標籤,放入在web-inf下
這裡寫圖片描述

<?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>privilege</shortname>
    <tag>
        <name>privilege</name>
        <tagclass>com.goodidea.sso.core.PrivilegeTag</tagclass>
        <bodycontent>empty</bodycontent> <!--這裡如果設為empty,則無body-->
        <attribute>
            <name>menuAlias</name>
            <required>true</required>
            <rtexprvalue>true</rtexprvalue>
        </attribute>
        <attribute>
            <name>priAlias</name>
            <required>true</required>
            <rtexprvalue>true</rtexprvalue>
        </attribute>
    </tag>
</taglib>

第四:頁面引用

<#assign p=JspTaglibs["/WEB-INF/tld/privilege.tld"] /> 

注意tld,如果不在web.xml上進行引入的話,就放在web-inf下,要不然會報找不到tld資源異常