权限系统自定义标签

在自己研发权限系统的时候因为自身原因不太喜欢使用现有的框架,但是在权限使用的时候发现会侵入过多的业务代码,这样系统耦合过多,所以自己模拟shiro进行权限系统判断。

这里做if else的标签代码


package com.tmall.lafite.web.admin.tag;

import java.io.IOException;
import java.util.Map;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyTagSupport;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

import com.alibaba.buc.sso.client.util.SimpleUserUtil;
import com.alibaba.dubbo.config.annotation.Service;
import com.alibaba.platform.buc.sso.common.dto.SimpleSSOUser;
import com.tmall.lafite.core.manager.permit.PermitManager;
import com.tmall.lafite.core.manager.permit.util.PermitSession;
import com.tmall.lafite.core.manager.permit.util.PermitUtil;
import com.tmall.lafite.dal.entity.permit.util.PermitResult;

/**
 * 权限自定义标签 if 判断
 * @author wangxiao
 *
 */
@Service
public class IfPermit extends BodyTagSupport{
	protected final Logger logger = LoggerFactory.getLogger(getClass());
	
	private static final long serialVersionUID = -3923894643359138714L;
	
	private String check;
	@Autowired
	private PermitManager permitManager;

	public String getCheck() {
		return check;
	}

	public void setCheck(String check) {
		this.check = check;
	}

	public IfPermit() {
        super();
        init();
    }
  
    @Override
    public void release() {
        super.release();
        init();
    }
      
    @Override
    public int doStartTag() throws JspException {
    	try {
			SimpleSSOUser user = SimpleUserUtil.findUser((HttpServletRequest) pageContext.getRequest());
			if(user == null) {
				test = false;
			} else {
				String opeator = user.getId().toString();
				
				Map<String, String> map = PermitUtil.parseCheckMsg(check);
				PermitSession algorithm = new PermitSession(map, opeator);
				PermitResult result = getPermitManager().hasPermit(algorithm);
				
				test = result.isAllow();
			}
		} catch (Exception e) {
			logger.error("IfPermit.doStartTag ", e);
			test = false;
		}
    	
        if(test){
            this.succeeded();
        }
        return EVAL_BODY_BUFFERED;
    }
  
    @Override
    public int doEndTag() throws JspException {
        try {
            if(subtagSucceeded)
                pageContext.getOut().write(getBody());
        } catch (IOException e) {
            throw new JspException("IOError while writing the body: " + e.getMessage(), e);
        }
          
        init();
        return super.doEndTag();
    }
      
    private String body = null;     //用于存放成功条件后的内容
    public void setBody(){
        if(body == null){
            body = bodyContent.getString().trim();
        }
    }
      
    private String getBody(){
        if(body == null)
            return bodyContent.getString().trim();
        else
            return body;
    }
      
    /**
     * 判断if 或者 子 else if是否提交成功
     */
    private boolean subtagSucceeded;
      
    /**
     * 子条件判断成功
     */
    public void succeeded(){
        subtagSucceeded = true;
    }
    /**
     * 是否已经执行完毕
     * @return
     */
    public boolean isSucceeded(){
        return subtagSucceeded;
    }
      
    private void init() {
        test = false;
        subtagSucceeded = false;
        body = null;
    }
    
    private boolean test;  
      
    public void setTest(boolean test) {
        this.test = test;
    }

	public PermitManager getPermitManager() {
		ServletContext servletContext = pageContext.getServletContext();
        WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext);
        permitManager = (PermitManager) wac.getBean("permitManager");
		return permitManager;
	}
    
    
}
else标签



package com.tmall.lafite.web.admin.tag;

import java.io.IOException;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspTagException;
import javax.servlet.jsp.tagext.BodyTagSupport;
import javax.servlet.jsp.tagext.Tag;

import org.apache.commons.lang.StringUtils;

import com.alibaba.dubbo.config.annotation.Service;

/**
 * 权限自定义标签 else 判断
 * @author wangxiao
 *
 */
@Service
public class ElsePermit extends BodyTagSupport{
	
	private static final long serialVersionUID = 2912994741944157118L;

	public void release() {
        super.release();
    }
    
    public int doStartTag() throws JspException {
        Tag parent = getParent();

        if(parent==null || !(parent instanceof IfPermit)){
            throw new JspTagException("else tag must inside if tag");
        }
        
        IfPermit IfPermit = (IfPermit)parent;
        if(IfPermit.isSucceeded()){
            // 已经有执行成功的条件,保存之前的html
            IfPermit.setBody();
        }else{
            // 之前没有的判断没有成功条件,则清除之前的输出
            IfPermit.getBodyContent().clearBody();
            IfPermit.succeeded();
            try {
            	String b = getBody();
            	if(!StringUtils.isEmpty(b)) {
            		pageContext.getOut().write(b);
            	}
			} catch (IOException e) {
				 throw new JspException("IOError while writing the body: " + e.getMessage(), e);
			}
        }
            
        return EVAL_BODY_BUFFERED;
    }
    
    private String body = null;        //    用于存放成功条件后的内容
    public void setBody(){
        if(body == null){
            body = bodyContent.getString().trim();
        }
    }
    
    private String getBody(){
        if(body == null && bodyContent != null)
            return bodyContent.getString().trim();
        else
            return body;
    }
    
}

tld配置

<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "web-jsptaglibrary_1_2.dtd" >  
<taglib>  
  <tlibversion>tlibversion</tlibversion>  <!-- 你自定义标签的版本数 -->  
  <jsp-version>1.2</jsp-version>  <!-- 指定你的JSP版本,扩张标签是在JSP1.2之后兼容的 -->  
  <shortname>shortname</shortname> <!-- 标签的简写 -->  
  <tag>  
    <name>if</name><!-- 标签名字 -->  
    <tagclass>com.tmall.lafite.web.admin.tag.IfPermit</tagclass><!-- 指定你的标签的类 -->  
	<attribute>
 		<description>description</description>
 		<name>check</name>
 		<required>true</required>
		<rtexprvalue>true</rtexprvalue>
		<type>java.lang.String</type>
	</attribute>
  </tag>
  <tag>  
    <name>elseif</name><!-- 标签名字 -->  
    <tagclass>com.tmall.lafite.web.admin.tag.ElseIfPermit</tagclass><!-- 指定你的标签的类 -->
  </tag>
  <tag>  
    <name>else</name><!-- 标签名字 -->  
    <tagclass>com.tmall.lafite.web.admin.tag.ElsePermit</tagclass><!-- 指定你的标签的类 -->
  </tag>
</taglib>
标签判断使用方式
<%@ taglib uri="http://admin.lafite.tmall.com/taglibs.tld" prefix="bit" %>
<bit:if check="p:10-11">
		<li class="submenu">
            <a href="#"><i class="icon icon-inbox"></i><span> if </span></a>
        </li>
		<bit:else>
		<li class="submenu">
            <a href="#"><i class="icon icon-inbox"></i><span> else </span></a>
        </li>
		</bit:else>
        </bit:if>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
完整全套资源下载地址:https://download.csdn.net/download/qq_27595745/70761177 【完整课程列表】 完整版Java web开发教程PPT课件 Java开发进阶教程 第01章 JavaScript简介以及基本语法(共15页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第02章 Dom模型,控制客户端元素(共15页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第03章 表单验证,常用函数(共15页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第04章 自定义web服务器(共14页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第06章 SERVLET(共15页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第07章 JSP语法及运行过程(共13页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第08章 JSP内置对象(共22页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第09章 jstl、el、java bean(共18页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第10章 过滤器、监听器、自定义标签(共19页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第11章 AJAX实现(共11页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第12章 自定义mvc框架(共11页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第13章 spring ioc aop(共18页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第14章 spring mvc介绍,原理以及搭建(共15页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第15章 spring mvc核心对象拦截器(共26页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第17章 自定义orm框架(共11页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第18章 mybatis框架的搭建以及应用(共13页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第19章 mybatis高级应用(共21页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第20章 数据库连接池,缓存(共15页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第22章 常用框架的介绍以及环境搭建(共16页).pptx JS课程案例ebookHTML\网上书店需求文档.doc

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值