天天看點

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 = L;

    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下

springboot 自定義權限标簽(tld),在freemarker引用
<?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資源異常

繼續閱讀