`
buaasss
  • 浏览: 27246 次
  • 性别: 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集成用户权限认证

    本项目“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拦截器控制权限

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

    struts2 框架 BBS系统 源代码

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

    shiro和struts2的简单整合

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

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

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

    struts2 Interceptor详解

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

    投票系统基于struts2

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

    struts2经典入门实例

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

    通用的权限管理,ssh项目中权限管理的一个小示例

    在这个"通用的权限管理,ssh项目中权限管理的一个小示例"中,我们将深入探讨SSH框架如何实现权限控制,并学习如何通过自定义标签进行更灵活的定制。 首先,让我们了解一下SSH框架的三个主要组件: 1. **Spring**:...

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

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

    struts2框架应用,最简单,适合刚刚起步

    5. **JSP页面**:使用Struts2标签库,如s:form、s:textfield、s:submit等,创建动态网页。 6. **拦截器**:学习并理解Struts2拦截器的概念,如何自定义拦截器,以及预定义的拦截器链,如params、validation、i18n等...

    struts权限管理

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

    struts2实例 登录系统

    表单提交通常通过一个JSP页面完成,这个页面包含了一个form标签,其action属性指向了Struts2配置中的Action名称。表单中的输入字段(如用户名和密码)会被映射到LoginAction类的相应属性,这一过程通过Struts2的注解...

    简单论坛系统(struts2+hibernate)

    Struts2的强大之处在于其灵活的拦截器机制,可以自定义拦截器实现认证、授权、日志等功能,还有强大的标签库,使得视图层的编写更加简洁。 其次,Hibernate是一个持久化框架,用于简化数据库操作。在论坛系统中,...

    Struts In Action

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

Global site tag (gtag.js) - Google Analytics