工作需要,用到权限控制标签,结合公司项目和网上查阅,弄了个权限标签。其中有一篇文章感觉不错,于是转到自己的博客中。
原文地址: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集成用户权限认证”旨在整合这三个强大的技术,即Spring、Struts2和Hibernate,来构建一个具备用户登录、权限验证、自定义权限标签以及人员角色资源管理功能的应用。下面我们将详细...
在“struts实现的权限分配”这一主题中,我们将深入探讨如何使用Struts来设计和实现一个安全的权限管理系统。 首先,我们需要理解权限分配的基本概念。在Web应用程序中,权限分配是确保不同用户或角色访问不同资源...
总结来说,基于Struts2的BBS项目充分利用了Struts2框架的功能,实现了用户认证、论坛浏览、发帖、回复等一系列功能。通过合理的架构设计和组件选择,确保了系统的扩展性和可维护性。项目的具体实现细节,如数据库...
基于Struts 2实现的博客网站是典型的Web应用程序,它展示了如何利用Struts 2的核心特性来处理用户请求、管理业务逻辑以及呈现视图。 一、Struts 2框架核心概念与特性 1. **Action**:Struts 2中的Action类是业务...
开发者可以通过实现`org.apache.struts2.interceptor.Interceptor`接口或继承`org.apache.struts2.interceptor.StrutsInterceptor`抽象类来自定义拦截器。在自定义拦截器时,需要重写`intercept()`方法,实现自己的...
在Struts2中,可以使用OGNL(Object-Graph Navigation Language)表达式语言来访问模型中的数据,并通过标签库(如Struts2自定义标签)来动态渲染页面。 4. **控制器(Controller)**:Struts2的控制器是Action类,...
6.使用拦截器实现权限验证 35 7.拦截器中的注解 37 8.使用PreResultListener实现回调 39 六、使用标签 40 1.基础表单标签 40 2.单选按钮和复选框: 41 3.三种方式实现下拉列表 41 4.二级联动 42 5.其它表单标签 44 6...
而Kisso则是一个轻量级的身份认证与授权框架,它简化了在Java Web应用中实现用户登录、权限控制等安全功能的过程。 在这个"struts-kisso375-demo"示例中,我们看到的是如何将Kisso 3.7.5版本与Struts框架进行整合的...
在Struts2中,拦截器(Interceptor)是实现业务逻辑控制和增强功能的重要组件,尤其是在权限控制方面。本文将深入探讨Struts2拦截器如何帮助我们实现精细的权限控制,并通过实际例子进行说明。 首先,理解Struts2...
3. **配置Struts2**:在Struts2的配置文件`struts.xml`中,添加Shiro拦截器,并将它添加到默认的或自定义的栈中。 4. **编写控制器**:在Struts2的Action类中,可以通过`Subject`对象进行登录、登出等操作。例如,`...
这涉及到用户身份验证和授权,可能使用了Spring Security或自定义的认证机制。 2. **投票创建**:管理员或特定权限的用户可以创建投票主题,设置选项和投票截止日期。这部分可能使用Struts2的表单提交和Action处理...
过滤器在Struts2中的作用不可忽视,它们可以在请求到达应用之前进行预处理,例如实现用户认证、URL重写、字符编码转换等功能,提升应用的安全性和用户体验。 在这个实例中,我们可能会接触到以下几个关键知识点: ...
在Struts1.2中,你可以使用自定义拦截器来实现细粒度的权限控制。拦截器可以在Action调用前后执行额外的逻辑,如检查用户权限。通过在struts-config.xml中注册并配置拦截器,可以将权限检查集成到应用程序的执行流程...
Struts2 拦截器是其核心特性之一,它基于Apache的拦截器模式实现,为应用程序提供了灵活的控制流程,使得在Action调用前后可以插入自定义的处理逻辑。Struts2 框架通过拦截器实现了MVC模式中的业务逻辑与表示层的...
3. **拦截器(Interceptors)**:Struts2采用拦截器机制来增强Action的功能,如日志记录、异常处理、权限验证等。 三、应用开发流程 1. **环境搭建**:首先需要在项目中引入Struts2的依赖库,例如通过Maven或...
6. **Interceptor拦截器**:Struts 2引入了拦截器机制,允许在Action调用前后插入自定义逻辑,如日志、权限检查等。 7. **国际化与本地化**:Struts支持多语言环境,通过资源文件实现内容的国际化。 8. **异常处理...
在Struts2中,拦截器(Interceptor)是一个至关重要的概念,它增强了MVC框架的功能,使得开发者可以对请求处理进行预处理和后处理,实现如日志记录、权限验证、事务管理等通用操作。下面我们将深入探讨Struts2拦截器...