首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

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

2012-10-13 
struts2自定义标签,实现权限认证* 编写PermissionComponent,该类需继承org.apache.struts2.components.Com

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   仅此而已 写道比较迷糊, 无权限的人访问页面中不显示按钮吗?
对啊.因为没有权限,<my:permission userId='3' pn='1' resourceSn='orgmgr'>has</my:permission>调用的方法PermissionComponent.start()返回false,所以"has"就不会输出

热点排行