`
buaasss
  • 浏览: 26973 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

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);
	}

	@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类

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 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>

 

 

 

分享到:
评论
4 楼 chenhua0725 2015-02-27  
能不能把aclManager里的代码贴出来昵
3 楼 wubin98 2012-11-13  
WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(request.getSession().getServletContext()); 
  this.aclManager = (AclManager) wac.getBean("aclManager");
报错呀!
No bean named 'aclManager' is defined

我在登陆时存了aclManager对象的!
2 楼 buaasss 2011-03-19  
仅此而已 写道
比较迷糊, 无权限的人访问页面中不显示按钮吗?

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

相关推荐

    hibernate-struts2-spring集成用户权限认证

    实现登录,实现权限验证,自定义权限标签,人员角色资源的增删改查,集成spring+hibernate+struts2

    Struts2入门教程(全新完整版)

    6.使用拦截器实现权限验证 35 7.拦截器中的注解 37 8.使用PreResultListener实现回调 39 六、使用标签 40 1.基础表单标签 40 2.单选按钮和复选框: 41 3.三种方式实现下拉列表 41 4.二级联动 42 5.其它表单标签 44 6...

    spring security 参考手册中文版

    28.2.2 Java EE容器认证 220 29. LDAP认证 220 29.1概述 220 29.2在Spring Security中使用LDAP 221 29.3配置LDAP服务器 221 29.3.1使用嵌入式测试服务器 222 29.3.2使用绑定认证 222 29.3.3加载权限 223 29.4实现类 ...

    java开源包2

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包3

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包4

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    JAVA上百实例源码以及开源项目源代码

    Java生成自定义控件源代码 2个目标文件 Java实现HTTP连接与浏览,Java源码下载 1个目标文件 摘要:Java源码,网络相关,HTTP  Java实现HTTP连接与浏览,Java源码下载,输入html文件地址或网址,显示页面和HTML源文件...

    JAVA上百实例源码以及开源项目

    Java生成自定义控件源代码 2个目标文件 Java实现HTTP连接与浏览,Java源码下载 1个目标文件 摘要:Java源码,网络相关,HTTP  Java实现HTTP连接与浏览,Java源码下载,输入html文件地址或网址,显示页面和HTML源文件...

    java开源包1

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包11

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包6

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包5

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包10

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包8

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包7

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包9

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包101

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    Java资源包01

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    超级有影响力霸气的Java面试题大全文档

    HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。 HashMap允许将null作为一个entry的key或者...

Global site tag (gtag.js) - Google Analytics