`

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

 
阅读更多

 

工作需要,用到权限控制标签,结合公司项目和网上查阅,弄了个权限标签。其中有一篇文章感觉不错,于是转到自己的博客中。

原文地址:http://buaasss.iteye.com/blog/748247

struts2的自定义标签,需要如下配置,两个类,一个组件类继承org.apache.struts2.components.Component;,一个Tag类继承org.apache.struts2.views.jsp.ComponentTagSupport;,一个tld文件,关联到tag类以及tag类中的各个参数属性,web.xml文件中配置tld位置。

首先组件类,代码都是从原文博客中引用的。

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

}

 

然后是tag类

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

 

然后是tld文件,tld文件要放到WEB-INF下面,参数说明:这里的required是说此参数在jsp页面中是否为必填的,rtexprvalue是说此参数是否支持动态的设定,也就是为它设定一个从后台中接收的值。name自然就是属性名了。

 

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

 然后就是在web.xml中配置tld文件,这个在原文中没有提及,在这里补充上去。uri是指页面中需要引用的uri地址,location就是我们创建的tld文件的位置。

 

<jsp-config>
	<taglib>
	    <taglib-uri>http://com.zilong.haha/ch/</taglib-uri>
	    <taglib-location>/WEB-INF/tld/xxx.tld</taglib-location>
	</taglib>
</jsp-config>

 然后就是jsp文件调用了。自己写吧

<%taglib prefix="zilong" uri="http://com.zilong.haha/ch/"/>//这里就是web.xml种配置的uri路径。
<zilong:namexx  id="" canshux=""/>  namexx就是组件的名称了

 OK!到此为止!

 

 

分享到:
评论

相关推荐

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

    本项目“hibernate-struts2-spring集成用户权限认证”旨在整合这三个强大的技术,即Spring、Struts2和Hibernate,来构建一个具备用户登录、权限验证、自定义权限标签以及人员角色资源管理功能的应用。下面我们将详细...

    struts实现的权限分配

    在“struts实现的权限分配”这一主题中,我们将深入探讨如何使用Struts来设计和实现一个安全的权限管理系统。 首先,我们需要理解权限分配的基本概念。在Web应用程序中,权限分配是确保不同用户或角色访问不同资源...

    基于Struts2的BBS项目

    总结来说,基于Struts2的BBS项目充分利用了Struts2框架的功能,实现了用户认证、论坛浏览、发帖、回复等一系列功能。通过合理的架构设计和组件选择,确保了系统的扩展性和可维护性。项目的具体实现细节,如数据库...

    基于Struts 2实现的博客网站

    基于Struts 2实现的博客网站是典型的Web应用程序,它展示了如何利用Struts 2的核心特性来处理用户请求、管理业务逻辑以及呈现视图。 一、Struts 2框架核心概念与特性 1. **Action**:Struts 2中的Action类是业务...

    struts2 Interceptor详解

    开发者可以通过实现`org.apache.struts2.interceptor.Interceptor`接口或继承`org.apache.struts2.interceptor.StrutsInterceptor`抽象类来自定义拦截器。在自定义拦截器时,需要重写`intercept()`方法,实现自己的...

    struts2 框架 BBS系统 源代码

    在Struts2中,可以使用OGNL(Object-Graph Navigation Language)表达式语言来访问模型中的数据,并通过标签库(如Struts2自定义标签)来动态渲染页面。 4. **控制器(Controller)**:Struts2的控制器是Action类,...

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

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

    源码:struts-kisso375-demo.rar

    而Kisso则是一个轻量级的身份认证与授权框架,它简化了在Java Web应用中实现用户登录、权限控制等安全功能的过程。 在这个"struts-kisso375-demo"示例中,我们看到的是如何将Kisso 3.7.5版本与Struts框架进行整合的...

    struts2拦截器控制权限

    在Struts2中,拦截器(Interceptor)是实现业务逻辑控制和增强功能的重要组件,尤其是在权限控制方面。本文将深入探讨Struts2拦截器如何帮助我们实现精细的权限控制,并通过实际例子进行说明。 首先,理解Struts2...

    shiro和struts2的简单整合

    3. **配置Struts2**:在Struts2的配置文件`struts.xml`中,添加Shiro拦截器,并将它添加到默认的或自定义的栈中。 4. **编写控制器**:在Struts2的Action类中,可以通过`Subject`对象进行登录、登出等操作。例如,`...

    投票系统基于struts2

    这涉及到用户身份验证和授权,可能使用了Spring Security或自定义的认证机制。 2. **投票创建**:管理员或特定权限的用户可以创建投票主题,设置选项和投票截止日期。这部分可能使用Struts2的表单提交和Action处理...

    struts2经典入门实例

    过滤器在Struts2中的作用不可忽视,它们可以在请求到达应用之前进行预处理,例如实现用户认证、URL重写、字符编码转换等功能,提升应用的安全性和用户体验。 在这个实例中,我们可能会接触到以下几个关键知识点: ...

    struts权限管理

    在Struts1.2中,你可以使用自定义拦截器来实现细粒度的权限控制。拦截器可以在Action调用前后执行额外的逻辑,如检查用户权限。通过在struts-config.xml中注册并配置拦截器,可以将权限检查集成到应用程序的执行流程...

    struts2拦截器

    Struts2 拦截器是其核心特性之一,它基于Apache的拦截器模式实现,为应用程序提供了灵活的控制流程,使得在Action调用前后可以插入自定义的处理逻辑。Struts2 框架通过拦截器实现了MVC模式中的业务逻辑与表示层的...

    Struts2.应用开发详解(第一讲)

    3. **拦截器(Interceptors)**:Struts2采用拦截器机制来增强Action的功能,如日志记录、异常处理、权限验证等。 三、应用开发流程 1. **环境搭建**:首先需要在项目中引入Struts2的依赖库,例如通过Maven或...

    Struts In Action

    6. **Interceptor拦截器**:Struts 2引入了拦截器机制,允许在Action调用前后插入自定义逻辑,如日志、权限检查等。 7. **国际化与本地化**:Struts支持多语言环境,通过资源文件实现内容的国际化。 8. **异常处理...

    struts2拦截器举例

    在Struts2中,拦截器(Interceptor)是一个至关重要的概念,它增强了MVC框架的功能,使得开发者可以对请求处理进行预处理和后处理,实现如日志记录、权限验证、事务管理等通用操作。下面我们将深入探讨Struts2拦截器...

Global site tag (gtag.js) - Google Analytics