`

使用拦截器验证session是否为空

    博客分类:
  • Java
阅读更多

第一步、定义一个拦截器

public class UserInterceptor extends AbstractInterceptor {
	private static String AUTH_SESSION_USER_KEY="userInfo";//从session中获取userInfo
	private static String NO_LOGIN="index";//session过期跳转页面,跳转到首页
	private static List<String> awayUrls = null; //放行URL
	static{
		awayUrls = new LinkedList<String>();  
		awayUrls.add("/login!userLoginOrQuit.action");//登陆action
	}
	
	@Override
	public String intercept(ActionInvocation invocation) throws Exception {
		/*
		//第一种获取session的方法
		Map<String, Object> session=invocation.getInvocationContext().getSession();
		HttpServletRequest request= (HttpServletRequest) invocation.getInvocationContext().get(StrutsStatics.HTTP_REQUEST);
		if(session.get(AUTH_SESSION_USER_KEY)==null){
			return NO_LOGIN;
		}
		*/
		//获取request域中信息  
        HttpServletRequest req = ServletActionContext.getRequest();  
        //获得当前请求url  
        String url = req.getServletPath();  
        //获得请求类型  
        String type = req.getHeader("X-Requested-With"); 
        System.out.println("当前请求URL:"+url+"\n请求类型:"+type);//ajax请求类型:XMLHttpRequest action请求类型:null
        System.out.println("userInfo:"+req.getSession().getAttribute(AUTH_SESSION_USER_KEY)+"\n");
        if(!awayUrls.contains(url)){
        	if(req.getSession().getAttribute(AUTH_SESSION_USER_KEY)==null){
            	return NO_LOGIN;
    		}
        }
		return invocation.invoke();
	}
}

第二步、在struts配置文件中添加监听器

<package name="test" extends="struts-default" namespace="/">
	<interceptors>
		<interceptor name="userInterceptor" class="com.wjl.UserInterceptor"></interceptor>
		<interceptor-stack name="user-inter">
			<interceptor-ref name="defaultStack"></interceptor-ref>
			<interceptor-ref name="userInterceptor"></interceptor-ref>
		</interceptor-stack>
	</interceptors>
	
	<default-interceptor-ref name="user-inter"></default-interceptor-ref>
	
	<global-results>
		<result name="index">/index.jsp</result>
	</global-results>
	<action name="login" class="loginAction">
	......
	</action>
	.......
</package>

如此配置之后,就可以拦截了。

不过呢,这样子拦截,有好的也有不好的,好的就是可以指定拦截的action,不好的就是“只能拦截指定的action,其他package下的action拦截不了”

想让其他的package也能起作用,两个方法:一、每个package的action中都加上拦截器配置:<action name=""><default-interceptor-ref name="user-inter"></default-interceptor-ref>....</action>,二、定义一个有拦截器配置的package让其他的package继承它。第一种比较麻烦也很简单这里就不说了,直接上第二种的代码:

<package name="all" extends="struts-default">
	<interceptors>
		<interceptor name="userInterceptor" class="com.wjl.UserInterceptor"></interceptor>
		<interceptor-stack name="user-inter">
			<interceptor-ref name="defaultStack"></interceptor-ref>
			<interceptor-ref name="userInterceptor"></interceptor-ref>
		</interceptor-stack>
	</interceptors>
	
	<default-interceptor-ref name="user-inter"></default-interceptor-ref>
	
	<global-results>
		<result name="index">/index.jsp</result>
	</global-results>
</package>

<package name="test" extends="all" namespace="/">
<action name="">
...
</action>
</package>

<package name="user" extends="all" namespace="/">
<action name="">
...
</action>
</package>
先定义name为all的package,让它继承其他package都需要的struts-default,并添加上拦截器配置信息。
然后让其他需要拦截的package继承(extends)这个package。
如此之后,就可以全部拦截啦。
 
最后,来说一下package中各个标签的顺序,这个顺序以前没注意,直到今天弄这个应用了才发现原来还有顺序之分的。具体排序如下:
result-types
interceptors
default-interceptor-ref
default-action-ref
default-class-ref
global-results
global-exception-mappings
action*(所有action放到最后)
要是顺序不对,服务器启动时会报错:org.xml.sax.SAXParseException: The content of element type "package" must match "(result-types?,interceptors?,default-interceptor-ref?,default-action-ref?,default-class-ref?,global-results?,global-exception-mappings?,action*)".
所以,这个顺序大家一定要注意啦!
分享到:
评论

相关推荐

    tokenSession拦截器的使用

    在这个例子中,`tokenAction`动作类使用了`tokenSession`拦截器,同时还使用了默认的拦截器栈`defaultStack`。需要注意的是,在这里没有指定`invalid.token`的Result,因为`tokenSession`拦截器在检测到重复提交时,...

    spring boot 拦截器拦截/Filter 过滤session案例

    在本文中,我们将深入探讨如何在Spring Boot应用中使用拦截器(Interceptor)和过滤器(Filter)来处理用户的登录session。这两个组件都是Spring框架的重要部分,它们在处理HTTP请求和响应时发挥着关键作用。 首先...

    Struts2 拦截器 手动验证 或 自动验证 后台登录验证 源码

    同时,登录页面提交的请求会被拦截器捕获,验证成功后,拦截器将用户标记为已登录,允许访问其他资源。 在提供的文件"10Struts2Validation"和"11Struts2InterceptorConfig"中,可能包含了Struts2拦截器配置和验证的...

    jFinal拦截器验证登录

    本篇文章将深入探讨如何在jFinal中使用拦截器来验证用户是否已经登录,确保安全访问受保护的资源。 首先,我们需要理解什么是拦截器(Interceptor)。在Web应用中,拦截器是一种设计模式,它允许在请求被处理之前或...

    简单的struts2拦截器利用session拦截用户登录.docx

    在这个案例中,我们讨论的是如何使用拦截器来检查用户的登录状态,并通过Session来判断用户是否已登录。 1. **LoginCheckInterceptor类**: - `LoginCheckInterceptor` 类继承自 `AbstractInterceptor`,这是一个...

    企业级开发-SpringMVC使用拦截器实现用户登录权限验证实验报告.docx

    本实验报告将探讨如何利用 SpringMVC 的拦截器(Interceptor)来实现用户登录权限验证,确保只有已登录的用户才能访问特定的受保护资源。 首先,我们来看一下实验的基本步骤: 1. 创建 `User` 类:这是表示用户...

    struts2拦截器和验证框架(适合初学者-经藏版)

    通过以上详细介绍,我们了解了Struts2中的拦截器和验证框架的基本概念、如何创建自定义拦截器以及如何配置拦截器和使用验证功能。这些知识点对于初学者来说非常重要,能够帮助他们更好地理解和使用Struts2框架。

    基于ssh拦截器框架Struts2拦截器的登录验证实现

    这个拦截器会在每个动作执行前检查 session 中是否有登录用户,如果有,则继续执行后续操作;否则,重定向到登录页面。在 struts.xml 配置文件中,我们需要声明这个拦截器,并将其应用于除 welcome 和 login 动作...

    基于springMVC的session拦截器

    2. **为什么需要Session拦截器?** 在某些情况下,我们希望确保每个请求都带有有效的用户信息,例如,限制未登录用户访问受保护的页面。通过实现Session拦截器,可以在请求被处理之前检查Session中是否存在必要的...

    Jfinal通过拦截器实现登录验证

    完成以上步骤后,我们需要进行测试,确保拦截器按预期工作,同时也要关注性能问题,避免因过度使用拦截器导致系统响应速度下降。优化可能包括减少不必要的拦截操作,或者采用缓存技术提高性能。 通过这样的方式,...

    structs2拦截器实例2-权限验证拦截器

    在这个“structs2拦截器实例2-权限验证拦截器”的主题中,我们将深入探讨如何使用Struts2拦截器进行权限验证。 首先,拦截器是基于AOP(面向切面编程)的概念实现的,它们可以插入到请求处理流程中,在Action执行前...

    SpringMVC拦截器实现监听session是否过期详解

    在Java Web开发中,特别是使用SpringMVC框架时,管理...总之,通过SpringMVC拦截器来实现对session是否过期的监听,是一个既灵活又强大的解决方案,对于需要精细控制Web应用会话的开发者来说,是一个必不可少的技术点。

    springmvc拦截器实现登录验证

    在本场景中,我们探讨的是如何利用拦截器来实现登录验证功能,确保只有经过身份验证的用户才能访问受保护的资源。 首先,我们需要了解Spring MVC的拦截器工作原理。拦截器链是由多个拦截器组成,每个拦截器都有`...

    jFinal 拦截器验证登录

    总之,jFinal的拦截器机制为开发者提供了强大的功能,通过编写自定义拦截器,我们可以实现灵活的业务逻辑控制,而无需侵入控制器代码,保持了代码的简洁和模块化。结合实际需求,合理运用拦截器,可以提升Web应用的...

    struts2-demo及登录验证的拦截器的使用

    6. **退出登录**:同样,提供一个退出登录的功能,清除session中的用户信息,使得拦截器在后续请求中判断为未登录状态。 通过这个struts2-demo项目,我们可以实践这些概念,理解如何将拦截器与实际业务逻辑结合,...

    struts2 拦截器实现登录控制

    如果用户试图访问需要登录的页面,拦截器会首先检查session中是否存在登录信息。如果找不到,那么它可以重定向用户到登录页面,或者返回错误消息,阻止进一步的操作。这通常涉及到对HTTP session的使用,检查特定的...

    理解拦截器用于在某个方法或字段被访

    【理解拦截器】 拦截器是面向切面编程(AOP)的一个重要概念,它允许在方法或字段被访问之前或之后插入额外的操作。这提供了一种灵活的方式,可以在不修改原有代码的情况下,增强或控制程序的行为。在Web开发框架如...

    Springmvc登录拦截器Demo

    本文将深入探讨如何使用Spring MVC的拦截器实现登录验证,并提供相关知识点。 1. **Spring MVC 拦截器简介** Spring MVC的拦截器是基于Servlet的Filter的一种扩展,它允许开发者在请求被控制器处理之前或之后执行...

    拦截器登陆权限验证案例

    4. **使用Session管理用户状态**:在用户成功登录后,我们将用户对象存储在Session中,以便在拦截器中检查。登录页面可以使用表单提交或Ajax请求来完成用户验证。 5. **不支持Hibernate**:虽然这个案例中没有使用...

Global site tag (gtag.js) - Google Analytics