struts2自定义标签,实现权限认证
* 编写PermissionComponent,该类需继承org.apache.struts2.components.Component类
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);}@Overridepublic 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;}@Overridepublic 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类
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;@Overridepublic Component getBean(ValueStack stack, HttpServletRequest request,HttpServletResponse arg2) {return new PermissionComponent(stack, request);}@Overrideprotected 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 version="1.0" encoding="UTF-8"?><!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd"><taglib><tlib-version>2.2.3</tlib-version><jsp-version>1.2</jsp-version><short-name>my</short-name><uri>/jtime</uri><tag><name>permission</name><tag-class>com.bjsxt.oa.web.tag.PermissionTag</tag-class><body-content>JSP</body-content><attribute><name>userId</name><required>true</required><rtexprvalue>true</rtexprvalue></attribute><attribute><name>resourceSn</name><required>true</required><rtexprvalue>true</rtexprvalue></attribute><attribute><name>pn</name><required>true</required><rtexprvalue>true</rtexprvalue></attribute></tag></taglib>
?
需要注意<body-content>JSP</body-content>这句话的含义,不同的参数表示对自定义标签的body的不同处理
?
* 在jsp中进行引用
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib prefix="my" uri="/WEB-INF/permission.tld"%><%String path = request.getContextPath();String basePath = request.getScheme() + "://"+ request.getServerName() + ":" + request.getServerPort()+ path + "/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transictional//EN"><html><head><base href="<%=basePath%>"><title>Tagtest</title></head><body>This is my JSP page.<br><my:permission userId='3' pn='1' resourceSn='orgmgr'>has</my:permission></body></html>
?
?
?
1 楼 仅此而已 2011-03-08 比较迷糊, 无权限的人访问页面中不显示按钮吗? 2 楼 buaasss 2011-03-19 仅此而已 写道比较迷糊, 无权限的人访问页面中不显示按钮吗?