自定义jstl标签实现页面级的权限控制

本文介绍了如何在Java Web项目中创建和使用自定义JSTL标签,包括编写标签处理类、配置tld文件及在JSP页面上的应用示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.准备

环境:maven

首先需要引入依赖

 <dependency>
            <groupId>javax.servlet.jsp.jstl</groupId>
            <artifactId>jstl-api</artifactId>
            <version>1.2</version>
        </dependency>

 二.重写jstl标签的要求

   1)编写一个实现Tag接口的java类(标签处理类)

package cn.tms.util;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.tagext.BodyTagSupport;
import cn.tms.dao.IPrivilegeDAO;
import cn.tms.entity.Privilege;
import cn.tms.entity.Tms_User;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
//标签
public class AuthorizeTag  extends BodyTagSupport {
    //你提供一个用户名字,我给一个用户拥有的权限集合,并且操作是在权限的DAO中
        private IPrivilegeDAO privilegeDAO;
        private String URL;
        public String getURL() {  
            return URL;  
        }  
          
        public void setURL(String uRL) {  
            URL = uRL;  
        }  
        @Override  
        public int doStartTag() {
            // 如果URL不空就显示URL,否则就不显  
            if (null != URL) {
                getUserDao();
                HttpServletRequest request = (HttpServletRequest)pageContext.getRequest();
                Tms_User info=(Tms_User)request.getSession().getAttribute("userinfo");
                List<Privilege> list = privilegeDAO.findAllPrivilegebyUserid(info.getUserid());
                for (Privilege item : list) {
                    if(item.getUrl().equals(URL)){
                          //正确渲染该标签
                          return EVAL_BODY_INCLUDE;  
                    }
                }
              
            }  
            return this.SKIP_BODY;  
        }
        public void getUserDao() {
              WebApplicationContext applicationContext = WebApplicationContextUtils.getWebApplicationContext(pageContext.getServletContext());
            privilegeDAO=(IPrivilegeDAO)applicationContext.getBean("IPrivilegeDAO");
        }

}

 


        2)编写标签库描述符(tld)文件,在tld文件中对标签处理类进行描述。

<?xml version="1.0" encoding="UTF-8" ?>  
<taglib xmlns="http://java.sun.com/xml/ns/javaee"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
    http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"  
    version="2.1">  
    <description>  
    <![CDATA[security Tags]]>  
    </description>  
    <tlib-version>1.0</tlib-version>  
    <short-name>security</short-name>  
    <uri>http://www.springsecurity.org/jsp</uri>
    <tag>  
        <description>  
        <![CDATA[authorize Tag]]>  
        </description>  
        <name>authorize</name>  
        <tag-class>  
           cn.tms.util.AuthorizeTag
        </tag-class>  
        <body-content>JSP</body-content>  
        <attribute>  
            <name>URL</name>  
            <required>false</required>  
            <rtexprvalue>true</rtexprvalue>  
            <type>java.lang.String</type>  
        </attribute>  
    </tag>  
</taglib>  

三.页面使用

<%@taglib prefix="au" uri="http://www.springsecurity.org/jsp" %>
prefix:自定义标签头
uri:编写标签库描述符(tld)文件 中的uri一致

<au:authorize URL="/user/labWeekSet">
    <a href="/user/labWeekSet">添加</a>
</au:authorize>

 

 

 

转载于:https://www.cnblogs.com/wy0119/p/7898317.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值