花费半天研究了一下struts拦截器实现登录验证。做下笔记
附上源码
- 搭建struts2环境,新建web工程,导入struts的jar包:
- 编辑web.xml,配置struts。在src下配置struts.xml配置文件
<package name="haslogin" extends="struts-default"> <interceptors> <!--定义一个名为loginintercetor的拦截器--> <interceptor name="loginintercetor" class="com.tch.interceptor.LoginInterceptor"></interceptor> <!--定义一个包含权限检查的拦截器栈--> <interceptor-stack name="myStack"> <!--配置自定义的拦截器--> <interceptor-ref name="loginintercetor"></interceptor-ref> <!--配置内建默认拦截器--> <interceptor-ref name="defaultStack"></interceptor-ref> </interceptor-stack> </interceptors> <default-interceptor-ref name="myStack"></default-interceptor-ref> <global-results > <result name="login">/WEB-INF/jsp/manage/login.jsp</result> </global-results> </package>
其他包引用haslogin,会使用登录和权限控制用到的拦截器loginintercetor
- 编写拦截器类LoginInterceptor.java
package com.tch.interceptor; import java.util.Map; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.AbstractInterceptor; public class LoginInterceptor extends AbstractInterceptor { @Override public String intercept(ActionInvocation invocation) throws Exception { Map<String, Object> session= invocation.getInvocationContext().getSession(); if (session.get("username")==null) { return "login"; } return invocation.invoke(); } }
从session中获取登录信息,若有登录用户则继续访问;若没有返回登录,访问global-results。
- 配置登录登出的action
<package name="manage" namespace="/manage" extends="haslogin"> <!-- 登录和登出不需要拦截,可单独配置interceptor-ref拦截器为defaultStack --> <action name="login" class="com.tch.action.LoginAction" method="manageUserLogin"> <!-- 配置type="redirect"会重定向,也就是url地址栏地址会变化 --> <result name="success" type="redirect">index.action</result> <interceptor-ref name="defaultStack"></interceptor-ref> </action> <action name="loginOut" class="com.tch.action.LoginAction" method="manageUserLoginOut"> <interceptor-ref name="defaultStack"></interceptor-ref> </action> <action name="index" class="com.tch.action.LoginAction" method="goToIndex"> <result name="success">/WEB-INF/jsp/manage/index.jsp</result> </action> </package>
将jsp文件放在 WEB-INF下,出于安全性考虑,防止绕过struts直接访问jsp文件。
- 最后再说一下jsp文件里action路径问题
我struts配置的action配置在namespace="/manage"下,index.jsp如下
<% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>">
<body> 欢迎<%= session.getAttribute("username")%> <form action="manage/loginOut"> <button type="submit" value="">退出登录</button> </form> </body>
命名空间是 namespace="/XXX" 那你form表单中的action应该是
action=XXX/UserLogin.action 最前面没有 / 因为struts2的web.xml 的核心控制器里的
url-pattern 是/* 就是所有的action 都是以/开头 所以表单中的action 属性 = 命名空间/ Action名字.后缀
相关推荐
在这个“Struts2拦截器实现权限控制demo”中,我们将深入探讨如何利用拦截器来实现细粒度的用户权限管理。 首先,我们需要了解Struts2中的拦截器工作原理。拦截器是基于Java的动态代理模式实现的,它们按照配置的...
这篇博客文章“struts2拦截器实现权限控制”深入探讨了如何利用Struts2的拦截机制来执行用户访问权限的验证。 在Struts2中,拦截器是基于AOP(面向切面编程)的概念设计的,它们在Action调用前后执行,可以添加额外...
在实际项目中,我们通常会结合Spring Security等安全框架,通过拦截器实现更复杂的权限控制。 总结,Struts2拦截器是其核心机制之一,它允许开发者以模块化的方式添加额外的功能,提高代码的可复用性和可维护性。...
拦截器是Struts2框架的一个重要组成部分,能够帮助开发者实现一些在请求处理前后执行的通用逻辑,如日志记录、权限验证、数据校验等。在本场景中,我们将探讨如何使用Struts2拦截器来实现对不文明字迹或者敏感词汇的...
在Struts2中,拦截器(Interceptor)扮演着核心角色,它们允许开发者在Action执行前后插入自定义的逻辑,如日志、权限检查、事务管理等。现在我们将深入探讨Struts2的拦截器机制及其实例应用。 ### 一、Struts2拦截...
拦截器在Struts2中扮演着至关重要的角色,它们是AOP(面向切面编程)的一个实现,用于在Action执行前后插入额外的功能。下面将详细探讨Struts2拦截器及其工作原理。 ### 一、Struts2 拦截器概念 1. **拦截器是什么...
拦截器名" class="拦截器实现类"/> ``` 如果需要向拦截器传递参数,可以使用`<param>`标签: ```xml 拦截器名" class="拦截器实现类"> 参数名">参数值 ``` #### 七、结论 通过对Struts2拦截器的深入分析,我们...
在Struts2中,拦截器是实现业务逻辑和控制流程之间解耦的关键组件。本教程将详细介绍如何使用Struts2的拦截器来实现用户权限登录功能。 ### 一、拦截器的原理与作用 1. **原理**:拦截器工作在Action调用之前,它...
描述中提到的“基于struts2的拦截器测试,实现了页面的跳转,中间过程的拦截”,这表明我们可能在创建一个测试场景,来验证拦截器如何控制请求的流向以及如何在特定的业务逻辑点进行干预。页面跳转通常是拦截器完成...
通过上述方式,我们可以利用Struts2的拦截器机制有效地实现页面访问控制和用户注册功能,同时保持代码的清晰和模块化。在实际开发中,还可以结合其他拦截器,如性能监控、日志记录、事务管理等,进一步增强应用的...
拦截器是Struts2框架的核心特性之一,它们扮演着处理请求、增强功能和实现业务逻辑的角色。在Struts2中,拦截器就像过滤器一样工作,通过链式调用在动作执行前后进行预处理和后处理。 首先,我们来理解一下拦截器的...
这个"struts2拦截器应用小例子"可能包含了一个简单的拦截器实现,展示了如何在实际项目中集成和使用。通过这个例子,你可以学习到如何创建、注册拦截器,以及如何在Struts2框架中构建拦截器栈,从而更灵活地管理应用...
本文将深入探讨如何利用Struts2的拦截器实现简单的登录功能。拦截器是Struts2框架的核心组件之一,它允许我们在动作执行前后插入自定义逻辑,比如权限验证、日志记录等。 首先,我们来理解一下Struts2拦截器的工作...
总结来说,Struts2拦截器是框架的核心部分,它们提供了一种灵活的方式,以实现各种功能,如日志记录、性能监控、权限控制等,同时保持代码的整洁和模块化。通过对`98struts201`文件的深入研究,我们可以更好地掌握...
在本案例中,我们将深入探讨如何使用Struts2拦截器实现登录权限验证,同时结合Servlet Filter进一步加强安全性。 首先,让我们理解Struts2拦截器的工作原理。拦截器是基于AOP(面向切面编程)的概念设计的,它们...
### Struts2拦截器的使用方法 #### 一、Struts2拦截器概述 Struts2框架中的拦截器(Interceptor)是一种重要的机制,用于在Action执行前后进行一系列处理,比如参数验证、数据预处理等。它能够帮助开发者更加灵活...
在Struts2中,拦截器是一个实现了`Interceptor`接口的类,它定义了`intercept()`方法,该方法会在Action执行之前和之后被调用,从而实现对请求的拦截和处理。 ### 二、拦截器栈与配置 Struts2中的拦截器不是单独...
在实际开发中,我们可以通过扩展Struts2的拦截器实现自定义功能。例如,你可以创建一个新的拦截器来实现登录检查、权限控制或性能监控,然后将其添加到拦截器栈中。通过理解和研究Struts2的拦截器源码,我们可以更好...
### Struts2拦截器实现用户登录权限的验证 在Web应用开发中,用户登录权限验证是确保系统安全的重要环节之一。Struts2框架提供了一种灵活的方式来实现这一功能:通过自定义拦截器来控制用户的访问权限。下面我们将...