花费半天研究了一下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,我感觉对初学者还是有一定帮助的
NULL 博文链接:https://luckyhua.iteye.com/blog/1863458
struts2 用拦截器 实现用户权限登录 可以直接运行,只单单用到struts的东西。
该项目主要用到的是struts2的拦截器技术,使用struts2拦截器技术,实现分限制游客浏览和会员浏览的功能。
利用Struts2的核心技术----拦截器实现权限控制。详细代码详解
STRUTS2拦截器控制页面访问权限的设计与实现,解决基于STRUTS2的web应用的程序访问控制,防止非法访问
Struts2的处理流程: • 客户端产生一个HttpServletRequest的请求,该请求被提交到一系列的标准过滤器(Filter)组建链中(如ActionContextCleanUp:它主要是清理当前线程的ActionContext、Dispatcher,...
struts2拦截器实现权限控制。 内附代码及说明。 就在这里和大家分享下,希望能帮到哪位朋友。
(1)首先直接访问 http://localhost:8080/MyStudy/showAction,我们会发现直接访问myhome.jsp会转入登录页面提示...(2)这时候输入xiaoming 12345登录,进入welcom.jsp页面 (3)点击链接后成功进入myhome.jsp页面
Struts2 工作原理及拦截器和过滤器 Struts2 框架的工作原理可以分为以下几个步骤: 1. 客户端发出一个指向 Servlet 容器的请求(Tomcat); 2. 这个请求会经过几个过滤器,最后会到达 FilterDispatcher 过滤器。...
1 实现权限控制拦截器 本示例应用要求用户登陆,且必须为指定用户名才可以查看系统中某个视图资源;否则,系统直接转入登陆页面。对于上面的需求,可以在每个Action的执行实际处理逻辑之前,先执行权限检查逻辑,但...
2、拦截器不依赖于servlet容器,通过动态代理实现,过滤器依赖于servlet容器 3、拦截器在方法前后,异常前后等调用,而过滤器只能在请求前和请求后各调一次。 4、拦截器可以利用依赖注入,因此在spring框架程序中,...
拦截器可以通过在 struts.xml 文件中配置或在 Action 中通过注入拦截器来实现。 8. Struts2 的国际化和本地化: Struts2 的国际化和本地化可以通过使用资源文件来实现。资源文件可以存放在类路径下或在 Web 项目的...
struts2的拦截器实现细颗粒度权限控制;struts2的拦截器实现异常处理;源代码;页面;教程
4.3 研究内建的Struts 2拦截器 67 4.3.1 工具拦截器 67 4.3.2 数据转移拦截器 67 4.3.3 工作流拦截器 69 4.3.4 其他拦截器 72 4.3.5 内建的拦截器栈 73 4.4 声明拦截器 74 4.4.1 声明独立的拦截器和拦截器栈 74 ...
Struts 2框架本身大致可以分为3个部分:核心控制器FilterDispatcher、业务控制器Action和用户实现的企业业务逻辑组件...Struts 2框架按照模块来划分,可以分为Servlet Filters、Struts核心模块、拦截器和用户实现部分。
4.3 在Struts2中配置自定义的拦截器 53 4.3.1 扩展拦截器接口的自定义拦截器配置 54 4.3.2 继承抽象拦截器的自定义拦截器配置 56 4.3.3 继承方法拦截器的自定义拦截器配置 58 4.4 Struts2文件上传拦截器应用 61 ...