struts2自定义标签,实现权限认证

 

* 编写PermissionComponent,该类需继承org.apache.struts2.components.Component类

Java代码 复制代码  收藏代码
  1. package com.bjsxt.oa.web.tag;   
  2.   
  3. import java.io.Writer;   
  4.   
  5. import javax.servlet.http.HttpServletRequest;   
  6.   
  7. import org.apache.struts2.components.Component;   
  8. import org.springframework.web.context.WebApplicationContext;   
  9. import org.springframework.web.context.support.WebApplicationContextUtils;   
  10.   
  11. import com.bjsxt.oa.manager.AclManager;   
  12. import com.opensymphony.xwork2.util.ValueStack;   
  13.   
  14. public class PermissionComponent extends Component {   
  15.   
  16.     private AclManager aclManager;   
  17.   
  18.     private int userId;   
  19.   
  20.     private String resourceSn;   
  21.   
  22.     private int pn;   
  23.        
  24.     public PermissionComponent(ValueStack stack, HttpServletRequest request) {   
  25.         super(stack);   
  26.         this.setAclManager(request);   
  27.     }   
  28.   
  29.     @Override  
  30.     public boolean start(Writer writer) {   
  31.         boolean result = aclManager.hasPermissionByResourceSn(userId,   
  32.                 resourceSn, pn);   
  33.         System.out.println("result=" + result);   
  34.            
  35.         // try {   
  36.         // if (result) {   
  37.         // writer.write("true");   
  38.         // return result;   
  39.         // }   
  40.         // writer.write("false");   
  41.         // } catch (IOException e) {   
  42.         // e.printStackTrace();   
  43.         // }   
  44.            
  45.         //当返回值为true时,body的内容被输出;false时,则被忽略,即不输出   
  46.         return result;   
  47.     }   
  48.   
  49.     @Override  
  50.     public boolean end(Writer writer, String body) {   
  51.         return super.end(writer, body);   
  52.     }   
  53.   
  54.     public int getUserId() {   
  55.         return userId;   
  56.     }   
  57.   
  58.     public void setUserId(int userId) {   
  59.         this.userId = userId;   
  60.     }   
  61.   
  62.     public String getResourceSn() {   
  63.         return resourceSn;   
  64.     }   
  65.   
  66.     public void setResourceSn(String resourceSn) {   
  67.         this.resourceSn = resourceSn;   
  68.     }   
  69.   
  70.     public int getPn() {   
  71.         return pn;   
  72.     }   
  73.   
  74.     public void setPn(int pn) {   
  75.         this.pn = pn;   
  76.     }   
  77.   
  78.     public void setAclManager(AclManager aclManager) {   
  79.         this.aclManager = aclManager;   
  80.     }   
  81.   
  82.     public void setAclManager(HttpServletRequest request) {   
  83.   
  84.         WebApplicationContext wac = WebApplicationContextUtils   
  85.                 .getRequiredWebApplicationContext(request.getSession()   
  86.                         .getServletContext());   
  87.   
  88.         this.aclManager = (AclManager) wac.getBean("aclManager");   
  89.     }   
  90.   
  91. }  
package com.bjsxt.oa.web.tag;

import java.io.Writer;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.components.Component;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

import com.bjsxt.oa.manager.AclManager;
import com.opensymphony.xwork2.util.ValueStack;

public class PermissionComponent extends Component {

	private AclManager aclManager;

	private int userId;

	private String resourceSn;

	private int pn;
	
	public PermissionComponent(ValueStack stack, HttpServletRequest request) {
		super(stack);
		this.setAclManager(request);
	}

	@Override
	public boolean start(Writer writer) {
		boolean result = aclManager.hasPermissionByResourceSn(userId,
				resourceSn, pn);
		System.out.println("result=" + result);
		
		// try {
		// if (result) {
		// writer.write("true");
		// return result;
		// }
		// writer.write("false");
		// } catch (IOException e) {
		// e.printStackTrace();
		// }
		
		//当返回值为true时,body的内容被输出;false时,则被忽略,即不输出
		return result;
	}

	@Override
	public boolean end(Writer writer, String body) {
		return super.end(writer, body);
	}

	public int getUserId() {
		return userId;
	}

	public void setUserId(int userId) {
		this.userId = userId;
	}

	public String getResourceSn() {
		return resourceSn;
	}

	public void setResourceSn(String resourceSn) {
		this.resourceSn = resourceSn;
	}

	public int getPn() {
		return pn;
	}

	public void setPn(int pn) {
		this.pn = pn;
	}

	public void setAclManager(AclManager aclManager) {
		this.aclManager = aclManager;
	}

	public void setAclManager(HttpServletRequest request) {

		WebApplicationContext wac = WebApplicationContextUtils
				.getRequiredWebApplicationContext(request.getSession()
						.getServletContext());

		this.aclManager = (AclManager) wac.getBean("aclManager");
	}

}

 

 

* 编写PermissionTag类,该类需继承org.apache.struts2.views.jsp.ComponentTagSupport类

Java代码 复制代码  收藏代码
  1. package com.bjsxt.oa.web.tag;   
  2.   
  3. import javax.servlet.http.HttpServletRequest;   
  4. import javax.servlet.http.HttpServletResponse;   
  5.   
  6. import org.apache.struts2.components.Component;   
  7. import org.apache.struts2.views.jsp.ComponentTagSupport;   
  8.   
  9. import com.opensymphony.xwork2.util.ValueStack;   
  10.   
  11. public class PermissionTag extends ComponentTagSupport {   
  12.   
  13.     private static final long serialVersionUID = 1631842497771460718L;   
  14.   
  15.     private int userId;   
  16.   
  17.     private String resourceSn;   
  18.   
  19.     private int pn;   
  20.   
  21.     @Override  
  22.     public Component getBean(ValueStack stack, HttpServletRequest request,   
  23.             HttpServletResponse arg2) {   
  24.         return new PermissionComponent(stack, request);   
  25.     }   
  26.   
  27.     @Override  
  28.     protected void populateParams() {   
  29.         super.populateParams();   
  30.         PermissionComponent pct = (PermissionComponent) component;   
  31.         pct.setUserId(userId);   
  32.         pct.setPn(pn);   
  33.         pct.setResourceSn(resourceSn);   
  34.     }   
  35.   
  36.     public int getUserId() {   
  37.         return userId;   
  38.     }   
  39.   
  40.     public void setUserId(int userId) {   
  41.         this.userId = userId;   
  42.     }   
  43.   
  44.     public String getResourceSn() {   
  45.         return resourceSn;   
  46.     }   
  47.   
  48.     public void setResourceSn(String resourceSn) {   
  49.         this.resourceSn = resourceSn;   
  50.     }   
  51.   
  52.     public int getPn() {   
  53.         return pn;   
  54.     }   
  55.   
  56.     public void setPn(int pn) {   
  57.         this.pn = pn;   
  58.     }   
  59. }  
package com.bjsxt.oa.web.tag;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.components.Component;
import org.apache.struts2.views.jsp.ComponentTagSupport;

import com.opensymphony.xwork2.util.ValueStack;

public class PermissionTag extends ComponentTagSupport {

	private static final long serialVersionUID = 1631842497771460718L;

	private int userId;

	private String resourceSn;

	private int pn;

	@Override
	public Component getBean(ValueStack stack, HttpServletRequest request,
			HttpServletResponse arg2) {
		return new PermissionComponent(stack, request);
	}

	@Override
	protected void populateParams() {
		super.populateParams();
		PermissionComponent pct = (PermissionComponent) component;
		pct.setUserId(userId);
		pct.setPn(pn);
		pct.setResourceSn(resourceSn);
	}

	public int getUserId() {
		return userId;
	}

	public void setUserId(int userId) {
		this.userId = userId;
	}

	public String getResourceSn() {
		return resourceSn;
	}

	public void setResourceSn(String resourceSn) {
		this.resourceSn = resourceSn;
	}

	public int getPn() {
		return pn;
	}

	public void setPn(int pn) {
		this.pn = pn;
	}
}

 

 

* 编写permission.tld文件,将该文件放到WEB-INF下面

 

Xml代码 复制代码  收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"    
  3. "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">  
  4.   
  5. <taglib>  
  6.     <tlib-version>2.2.3</tlib-version>  
  7.     <jsp-version>1.2</jsp-version>  
  8.     <short-name>my</short-name>  
  9.     <uri>/jtime</uri>  
  10.     <tag>  
  11.         <name>permission</name>  
  12.         <tag-class>com.bjsxt.oa.web.tag.PermissionTag</tag-class>  
  13.         <body-content>JSP</body-content>  
  14.         <attribute>  
  15.             <name>userId</name>  
  16.             <required>true</required>  
  17.             <rtexprvalue>true</rtexprvalue>  
  18.         </attribute>  
  19.         <attribute>  
  20.             <name>resourceSn</name>  
  21.             <required>true</required>  
  22.             <rtexprvalue>true</rtexprvalue>  
  23.         </attribute>  
  24.         <attribute>  
  25.             <name>pn</name>  
  26.             <required>true</required>  
  27.             <rtexprvalue>true</rtexprvalue>  
  28.         </attribute>  
  29.     </tag>  
  30. </taglib>  

 

需要注意<body-content>JSP</body-content>这句话的含义,不同的参数表示对自定义标签的body的不同处理

 

* 在jsp中进行引用

Java代码 复制代码  收藏代码
  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>   
  2. <%@ taglib prefix="my" uri="/WEB-INF/permission.tld"%>   
  3.   
  4. <%   
  5.     String path = request.getContextPath();   
  6.     String basePath = request.getScheme() + "://"  
  7.             + request.getServerName() + ":" + request.getServerPort()   
  8.             + path + "/";   
  9. %>   
  10.   
  11. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transictional//EN">   
  12. <html>   
  13.     <head>   
  14.         <base href="<%=basePath%>">   
  15.   
  16.         <title>Tagtest</title>   
  17.   
  18.     </head>   
  19.   
  20.     <body>   
  21.         This is my JSP page.   
  22.         <br>   
  23.         <my:permission userId='3' pn='1' resourceSn='orgmgr'>has</my:permission>   
  24.     </body>   
  25. </html>  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值