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