springboot 自定义权限标签(tld),在freemarker引用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/cutterwolf/article/details/78085808

第一步:引入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资源异常

没有更多推荐了,返回首页