进行权限控制是很多应用都会用到,本示例要求用户登录,且为指定用户名才可以查看系统中的某个视图资源,否则系统直接转入登录页面。
检查用户是否登录,通常都是通过跟踪用户的session来完成的,通过ActionContext即可访问到session中的属性,拦截器的intercept(ActionInvocation invocation)方法的invocation参数就可以很轻易地访问到请求相关的ActionContext实例。
下面就以登录为例来演示:
1、创建登录页面
login.jsp:
登录页面<script type="text/javascript">
function register(){
//获取jsp页面中的一个表单元素
targetForm = document.form1;
//动态修改目标表单的ation属性
targetForm.action = "login!register.action";
//提交表单
targetForm.submit();
}
</script>
2、创建pojo和Action
UserBean.java:
package com.lee.action;
/**
* @author lijunjie
*/
import java.text.SimpleDateFormat;
import java.util.Date;
public class UserBean {
private String userName;
private String password;
private String tip;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getTip() {
return tip;
}
public void setTip(String tip) {
this.tip = tip;
}
}
LoginAction.java:
package com.lee.action;
/**
* @author lijunjie
*/
import java.util.Map;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
public class LoginAction extends ActionSupport implements ModelDriven<userbean> {
private UserBean model = new UserBean();
@Override
public String execute() throws Exception {
System.out.println("开始执行execute()");
if("sortec".equals(model.getUserName()) && "sortec".equals(model.getPassword())){
this.getModel().setTip("服务器提示:登录成功...嘎嘎");
ActionContext ctx = ActionContext.getContext();
Map session = ctx.getSession();
session.put("user", this.getModel().getUserName());
return SUCCESS;
}else{
return ERROR;
}
}
public void hello(){
System.out.println("hello...");
}
public UserBean getModel() {
return model;
}
}
3、创建权限拦截器
AuthorityInterceptor.java:
package com.lee.action;
import java.util.Map;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
/**
* 定义权限检查拦截器
* @author lijunjie
*
*/
public class AuthorityInterceptor extends AbstractInterceptor {
private static final long serialVersionUID = 7367211037602072409L;
//拦截Action处理的拦截方法
@Override
public String intercept(ActionInvocation invocation) throws Exception {
//取得请求相关的ActionContext实例
ActionContext ctx = invocation.getInvocationContext();
Map session = ctx.getSession();
//取出名为user的session属性
String user = (String) session.get("user");
//如果没有登录,或者登录所用的用户名不是sortec,都返回重新登录
if(null != user && "sortec".equals(user)){
return invocation.invoke();
}
//没有登录,将服务器提示设置成一个HttpServletRequest属性
//ctx.put("tip", "您还没有登录,请先登录系统。。。");
//直接返回LOGIN的逻辑视图
return Action.LOGIN;
}
}
4、配置拦截器
struts.xml:
<struts><include file="struts-default.xml"></include><package name="base" extends="struts-default"><global-results><result name="login">/login.jsp</result></global-results></package><package name="lee" extends="base"><interceptors><!-- 定义了一个名为authority的拦截器 --><interceptor name="authority" class="com.lee.action.AuthorityInterceptor"></interceptor></interceptors><!-- 指定名为showBook的Action --><action name="login" class="com.lee.action.LoginAction"><!-- 返回SUCCESS逻辑视图时,转入showbooks.jsp物理视图 --><result>/showbooks.jsp</result><!-- 拦截器一般配置在result之后 --><interceptor-ref name="defaultStack"></interceptor-ref><!-- 自定义拦截器
<interceptor-ref name="authority"/>--></action></package></struts> 注:考虑到这个拦截器的重复使用,可能多个Action都需要跳转到login逻辑视图,故将login Result定义成一个全局Result。
5、测试,当用户名和密码都输入sortec,点击登录按钮,系统会跳转到showbooks.jsp,看到页面内容为:服务器提示:登录成功...嘎嘎 ;否则,系统都会跳转到login.jsp登录页面。
原文地址:http://lijunjie337.iteye.com/blog/657173
分享到:
相关推荐
1. 创建权限拦截器:首先,我们需要编写一个实现了`Interceptor`接口的类,例如`AuthorizationInterceptor`。在这个类中,我们可以检查用户的登录状态、角色等信息,以确定他们是否有权限执行请求的操作。 2. 注册...
在`struts.xml`中,可以创建一个或多个拦截器栈,并将权限拦截器包含在内。 4. 应用拦截器:在Action配置中,通过`<interceptor-ref>`标签引用拦截器栈,确保在执行Action之前会经过权限拦截器的验证。 此外,还...
在Struts2中,拦截器是基于Java的动态AOP(面向切面编程)实现的,它可以在Action调用前后插入额外的逻辑,比如日志记录、权限验证、事务管理等。拦截器通过配置文件或者注解与Action关联,形成一个拦截器栈,每个...
在Struts2中,拦截器是实现业务逻辑和控制流程之间解耦的关键组件。本教程将详细介绍如何使用Struts2的拦截器来实现用户权限登录功能。 ### 一、拦截器的原理与作用 1. **原理**:拦截器工作在Action调用之前,它...
Struts2的拦截器是实现业务逻辑和控制逻辑之间解耦的重要工具。我们可以通过自定义拦截器来实现特定的功能,比如权限验证、日志记录等。在Struts2的配置文件中,我们可以注册这个拦截器: ```xml ``` 然后在...
本文将深入探讨如何使用Struts2实现拦截器,以及如何配置拦截器来实现用户权限拦截。 首先,我们需要了解拦截器的工作原理。在Struts2中,拦截器是基于Java的动态代理机制实现的,它们按照预定义的顺序形成一个拦截...
Struts2是一个非常流行的Java Web框架,用于...通过学习这个文档,开发者可以了解到如何在实际项目中灵活运用Struts2的拦截器来实现高效且健壮的权限控制系统。这种能力对提升应用的安全性和用户体验有着显著的贡献。
拦截器是Struts2框架中的一个重要组成部分,它们在Action调用前后执行,可以用于实现各种功能,如日志、事务管理以及我们的重点——权限拦截。 权限拦截是Web应用安全机制的重要一环,它确保只有具备特定权限的用户...
-- 添加自定义的权限拦截器 --> <default-interceptor-ref name="myStack"/><!-- 设置默认拦截器栈 --> *" class="yourActionClass"> <result name="success">/success.jsp <result name="unauthorized">/...
在本案例中,我们将深入探讨如何使用Struts2拦截器实现登录权限验证,同时结合Servlet Filter进一步加强安全性。 首先,让我们理解Struts2拦截器的工作原理。拦截器是基于AOP(面向切面编程)的概念设计的,它们...
拦截器是Struts2框架的一个重要组成部分,能够帮助开发者实现一些在请求处理前后执行的通用逻辑,如日志记录、权限验证、数据校验等。在本场景中,我们将探讨如何使用Struts2拦截器来实现对不文明字迹或者敏感词汇的...
总的来说,Struts2实现权限拦截涉及到创建自定义拦截器、配置拦截器栈、编写权限检查逻辑以及处理异常情况。这是一个涉及多方面技术知识的过程,但通过学习和实践,开发者能够有效地增强系统的安全性,为用户提供...
这篇博客“struts2 拦截器实现登录控制”显然会探讨如何利用拦截器来实现用户登录验证,从而保护应用程序的受保护资源。 首先,我们了解下Struts2拦截器的工作原理。拦截器是基于AOP(面向切面编程)的概念,它位于...
在实际项目中,我们通常会结合Spring Security等安全框架,通过拦截器实现更复杂的权限控制。 总结,Struts2拦截器是其核心机制之一,它允许开发者以模块化的方式添加额外的功能,提高代码的可复用性和可维护性。...
描述中提到的“基于struts2的拦截器测试,实现了页面的跳转,中间过程的拦截”,这表明我们可能在创建一个测试场景,来验证拦截器如何控制请求的流向以及如何在特定的业务逻辑点进行干预。页面跳转通常是拦截器完成...
通过上述方式,我们可以利用Struts2的拦截器机制有效地实现页面访问控制和用户注册功能,同时保持代码的清晰和模块化。在实际开发中,还可以结合其他拦截器,如性能监控、日志记录、事务管理等,进一步增强应用的...
拦截器在Struts2中扮演着至关重要的角色,它们是AOP(面向切面编程)的一个实现,用于在Action执行前后插入额外的功能。下面将详细探讨Struts2拦截器及其工作原理。 ### 一、Struts2 拦截器概念 1. **拦截器是什么...
通过对Struts 2框架中过滤器和拦截器的核心区别以及具体应用场景的分析,我们可以看到,虽然两者都能实现类似的功能(如权限验证),但它们的工作方式和技术基础存在明显差异。选择合适的技术方案取决于实际项目的...
在Struts2中,拦截器(Interceptor)扮演着核心角色,它们允许开发者在Action执行前后插入自定义的逻辑,如日志、权限检查、事务管理等。现在我们将深入探讨Struts2的拦截器机制及其实例应用。 ### 一、Struts2拦截...
例如,你可以创建一个新的拦截器来实现登录检查、权限控制或性能监控,然后将其添加到拦截器栈中。通过理解和研究Struts2的拦截器源码,我们可以更好地利用这个强大工具,提高应用的可扩展性和灵活性。同时,这也为...