`
卧薪喝咖啡
  • 浏览: 5223 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

struts2 拦截器实现登录控制

阅读更多

花费半天研究了一下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名字.后缀

 

  • 大小: 24.4 KB
分享到:
评论

相关推荐

    Struts2拦截器实现权限控制demo

    Struts2拦截器实现权限控制demo,我感觉对初学者还是有一定帮助的

    struts2拦截器实现权限控制

    NULL 博文链接:https://luckyhua.iteye.com/blog/1863458

    struts2 用拦截器 实现用户权限登录

    struts2 用拦截器 实现用户权限登录 可以直接运行,只单单用到struts的东西。

    struts2拦截器

    该项目主要用到的是struts2的拦截器技术,使用struts2拦截器技术,实现分限制游客浏览和会员浏览的功能。

    Struts2利用拦截器实现权限控制

    利用Struts2的核心技术----拦截器实现权限控制。详细代码详解

    STRUTS2拦截器控制页面访问权限的设计与实现

    STRUTS2拦截器控制页面访问权限的设计与实现,解决基于STRUTS2的web应用的程序访问控制,防止非法访问

    Java Struts 实现拦截器

    Struts2的处理流程: • 客户端产生一个HttpServletRequest的请求,该请求被提交到一系列的标准过滤器(Filter)组建链中(如ActionContextCleanUp:它主要是清理当前线程的ActionContext、Dispatcher,...

    struts2 拦截器 权限 ajax jsp

    struts2拦截器实现权限控制。 内附代码及说明。 就在这里和大家分享下,希望能帮到哪位朋友。

    struts2拦截器学习小例子--实现权限控制

    (1)首先直接访问 http://localhost:8080/MyStudy/showAction,我们会发现直接访问myhome.jsp会转入登录页面提示...(2)这时候输入xiaoming 12345登录,进入welcom.jsp页面 (3)点击链接后成功进入myhome.jsp页面

    struts2工作原理及拦截器和过滤器

    Struts2 工作原理及拦截器和过滤器 Struts2 框架的工作原理可以分为以下几个步骤: 1. 客户端发出一个指向 Servlet 容器的请求(Tomcat); 2. 这个请求会经过几个过滤器,最后会到达 FilterDispatcher 过滤器。...

    使用Struts2的拦截器实现权限控制

    1 实现权限控制拦截器 本示例应用要求用户登陆,且必须为指定用户名才可以查看系统中某个视图资源;否则,系统直接转入登陆页面。对于上面的需求,可以在每个Action的执行实际处理逻辑之前,先执行权限检查逻辑,但...

    拦截器和控制器的区别

    2、拦截器不依赖于servlet容器,通过动态代理实现,过滤器依赖于servlet容器 3、拦截器在方法前后,异常前后等调用,而过滤器只能在请求前和请求后各调一次。 4、拦截器可以利用依赖注入,因此在spring框架程序中,...

    Struts2知识点

    拦截器可以通过在 struts.xml 文件中配置或在 Action 中通过注入拦截器来实现。 8. Struts2 的国际化和本地化: Struts2 的国际化和本地化可以通过使用资源文件来实现。资源文件可以存放在类路径下或在 Web 项目的...

    自定义拦截器(实现异常处理+细颗粒权限控制).zip

    struts2的拦截器实现细颗粒度权限控制;struts2的拦截器实现异常处理;源代码;页面;教程

    Struts2 in action中文版

    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 ...

    Struts2详细工作流程

    Struts 2框架本身大致可以分为3个部分:核心控制器FilterDispatcher、业务控制器Action和用户实现的企业业务逻辑组件...Struts 2框架按照模块来划分,可以分为Servlet Filters、Struts核心模块、拦截器和用户实现部分。

    struts2讲义_吴峻申

    4.3 在Struts2中配置自定义的拦截器 53 4.3.1 扩展拦截器接口的自定义拦截器配置 54 4.3.2 继承抽象拦截器的自定义拦截器配置 56 4.3.3 继承方法拦截器的自定义拦截器配置 58 4.4 Struts2文件上传拦截器应用 61 ...

Global site tag (gtag.js) - Google Analytics