第一步、定义一个拦截器:
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,并添加上拦截器配置信息。
相关推荐
在这个例子中,`tokenAction`动作类使用了`tokenSession`拦截器,同时还使用了默认的拦截器栈`defaultStack`。需要注意的是,在这里没有指定`invalid.token`的Result,因为`tokenSession`拦截器在检测到重复提交时,...
在本文中,我们将深入探讨如何在Spring Boot应用中使用拦截器(Interceptor)和过滤器(Filter)来处理用户的登录session。这两个组件都是Spring框架的重要部分,它们在处理HTTP请求和响应时发挥着关键作用。 首先...
同时,登录页面提交的请求会被拦截器捕获,验证成功后,拦截器将用户标记为已登录,允许访问其他资源。 在提供的文件"10Struts2Validation"和"11Struts2InterceptorConfig"中,可能包含了Struts2拦截器配置和验证的...
本篇文章将深入探讨如何在jFinal中使用拦截器来验证用户是否已经登录,确保安全访问受保护的资源。 首先,我们需要理解什么是拦截器(Interceptor)。在Web应用中,拦截器是一种设计模式,它允许在请求被处理之前或...
在这个案例中,我们讨论的是如何使用拦截器来检查用户的登录状态,并通过Session来判断用户是否已登录。 1. **LoginCheckInterceptor类**: - `LoginCheckInterceptor` 类继承自 `AbstractInterceptor`,这是一个...
本实验报告将探讨如何利用 SpringMVC 的拦截器(Interceptor)来实现用户登录权限验证,确保只有已登录的用户才能访问特定的受保护资源。 首先,我们来看一下实验的基本步骤: 1. 创建 `User` 类:这是表示用户...
通过以上详细介绍,我们了解了Struts2中的拦截器和验证框架的基本概念、如何创建自定义拦截器以及如何配置拦截器和使用验证功能。这些知识点对于初学者来说非常重要,能够帮助他们更好地理解和使用Struts2框架。
这个拦截器会在每个动作执行前检查 session 中是否有登录用户,如果有,则继续执行后续操作;否则,重定向到登录页面。在 struts.xml 配置文件中,我们需要声明这个拦截器,并将其应用于除 welcome 和 login 动作...
2. **为什么需要Session拦截器?** 在某些情况下,我们希望确保每个请求都带有有效的用户信息,例如,限制未登录用户访问受保护的页面。通过实现Session拦截器,可以在请求被处理之前检查Session中是否存在必要的...
完成以上步骤后,我们需要进行测试,确保拦截器按预期工作,同时也要关注性能问题,避免因过度使用拦截器导致系统响应速度下降。优化可能包括减少不必要的拦截操作,或者采用缓存技术提高性能。 通过这样的方式,...
在这个“structs2拦截器实例2-权限验证拦截器”的主题中,我们将深入探讨如何使用Struts2拦截器进行权限验证。 首先,拦截器是基于AOP(面向切面编程)的概念实现的,它们可以插入到请求处理流程中,在Action执行前...
在Java Web开发中,特别是使用SpringMVC框架时,管理...总之,通过SpringMVC拦截器来实现对session是否过期的监听,是一个既灵活又强大的解决方案,对于需要精细控制Web应用会话的开发者来说,是一个必不可少的技术点。
在本场景中,我们探讨的是如何利用拦截器来实现登录验证功能,确保只有经过身份验证的用户才能访问受保护的资源。 首先,我们需要了解Spring MVC的拦截器工作原理。拦截器链是由多个拦截器组成,每个拦截器都有`...
总之,jFinal的拦截器机制为开发者提供了强大的功能,通过编写自定义拦截器,我们可以实现灵活的业务逻辑控制,而无需侵入控制器代码,保持了代码的简洁和模块化。结合实际需求,合理运用拦截器,可以提升Web应用的...
6. **退出登录**:同样,提供一个退出登录的功能,清除session中的用户信息,使得拦截器在后续请求中判断为未登录状态。 通过这个struts2-demo项目,我们可以实践这些概念,理解如何将拦截器与实际业务逻辑结合,...
如果用户试图访问需要登录的页面,拦截器会首先检查session中是否存在登录信息。如果找不到,那么它可以重定向用户到登录页面,或者返回错误消息,阻止进一步的操作。这通常涉及到对HTTP session的使用,检查特定的...
【理解拦截器】 拦截器是面向切面编程(AOP)的一个重要概念,它允许在方法或字段被访问之前或之后插入额外的操作。这提供了一种灵活的方式,可以在不修改原有代码的情况下,增强或控制程序的行为。在Web开发框架如...
本文将深入探讨如何使用Spring MVC的拦截器实现登录验证,并提供相关知识点。 1. **Spring MVC 拦截器简介** Spring MVC的拦截器是基于Servlet的Filter的一种扩展,它允许开发者在请求被控制器处理之前或之后执行...
4. **使用Session管理用户状态**:在用户成功登录后,我们将用户对象存储在Session中,以便在拦截器中检查。登录页面可以使用表单提交或Ajax请求来完成用户验证。 5. **不支持Hibernate**:虽然这个案例中没有使用...