struts2拦截器获取HTTPsession失败

问题描述

拦截器:拦截没有session的访问publicStringintercept(ActionInvocationinvocation)throwsException{HttpServletRequestrequest=(HttpServletRequest)ServletActionContext.getRequest();HttpSessionsession=(HttpSession)request.getSession();//Mapsession=invocation.getInvocationContext().getSession();System.out.println("开始判定");Stringpath=request.getServletPath();System.out.println("managerINFO是否为空"+(session.getAttribute("managerInfo")!=null));/**通过session中是否有managerInfo来拦截访问**/if(session.getAttribute("managerInfo")!=null){returninvocation.invoke();}/***对没有session值的,对URI进行拦截*/return(list!=null&&list.contains(path))?invocation.invoke():Action.LOGIN;}

action如下:如果有帐号密码,则还回SUCCESSpublicStringlogin(){if(StringUtils.isBlank(manager.getManagername())||StringUtils.isBlank(manager.getPassword())){returnLOGIN;}//查找登录名字,如果数据库有记录,则设置一个session值if(managerService.login(manager)){request.getSession().setAttribute("managerInfo",manager);System.out.println("Action中的managerINFO是否为空"+(request.getSession().getAttribute("managerInfo")!=null));returnSUCCESS;}returnLOGIN;}

下面是struts2的配置<!--管理员操作--><packagename="admin"namespace="/admin"extends="struts-default"><!--拦截器--><interceptors><interceptorname="adminLogin"class="adminLoginInterceptor"/><interceptor-stackname="admindefault"><interceptor-refname="adminLogin"/><interceptor-refname="defaultStack"/></interceptor-stack></interceptors><default-interceptor-refname="admindefault"/><actionname="admin_*"class="managerAction"method="{1}"><resultname="login"type="redirect">index.jsp</result><resultname="success">/WEB-INF/page/admin/index.jsp</result><resultname="top">/WEB-INF/page/admin/top.jsp</result><resultname="left">/WEB-INF/page/admin/left.jsp</result><resultname="list">/WEB-INF/page/admin/memberlist.jsp</result></action></package>

下面是结果:问题:拦截器中得不到session

解决方案

解决方案二:
顶起来,查遍网络。google没法用,找不到答案,只好来这求答案了
解决方案三:
没看出来,你用的什么拦截器
解决方案四:
Struts2拦截session用Filter例:packagecom.utils;importjava.io.IOException;importjava.util.Map;importjavax.annotation.Resource;importjavax.servlet.Filter;importjavax.servlet.FilterChain;importjavax.servlet.FilterConfig;importjavax.servlet.ServletException;importjavax.servlet.ServletRequest;importjavax.servlet.ServletResponse;importjavax.servlet.http.Cookie;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importjavax.servlet.http.HttpSession;importorg.apache.log4j.Logger;importorg.apache.struts2.ServletActionContext;importorg.springframework.web.context.WebApplicationContext;importorg.springframework.web.context.support.WebApplicationContextUtils;importcom.cheater.init.service.InitService;importcom.cheater.init.service.InitServiceImpl;importcom.cheater.model.User;/****@Date:2013-12-13下午4:59:27*@Author:Gyh*@TODO:系统权限过滤器(未登录用户不允许访问某些功能)*/publicclassPrivilegeFilterimplementsFilter{WebApplicationContextcontext;privatestaticLoggerlogger=Logger.getLogger(LogAspect.class);@Overridepublicvoiddestroy(){}@OverridepublicvoiddoFilter(ServletRequestarg0,ServletResponsearg1,FilterChainarg2)throwsIOException,ServletException{doBeforeFilter(arg0);//判断是否保存有登录信息try{HttpServletRequestrequest=(HttpServletRequest)arg0;HttpServletResponseresponse=(HttpServletResponse)arg1;Useruser=(User)request.getSession().getAttribute(Constants.USER);Stringaction=request.getServletPath();//action名System.out.println("调用的action:"+action);if(null!=request.getQueryString())System.out.println("传递的参数:"+request.getQueryString());//Stringparams=request.getQueryString();//后面的参数Map<String,String>acceptedAction=Constants.ACCEPTED_ACTION;if(null==user&&acceptedAction.containsKey(action)){response.sendRedirect(request.getContextPath()+"/init_login.action");}else{arg2.doFilter(request,response);}}catch(Exceptione){e.printStackTrace();}}privatevoiddoBeforeFilter(ServletRequestrequest){HttpSessionsession=((HttpServletRequest)request).getSession(true);//首先检查session,若已经登陆则直接忽略以下代码if(session.getAttribute(Constants.USER)!=null){return;}Cookie[]cookies=((HttpServletRequest)request).getCookies();Stringemail=null;Stringpassword=null;if(cookies!=null){for(Cookiec:cookies){if(c.getName().equals("email")){email=c.getValue();}if(c.getName().equals("pass")){password=c.getValue();}}context=WebApplicationContextUtils.getWebApplicationContext(session.getServletContext());//获取springbeanInitServiceinitService=(InitService)context.getBean("initService");Useruser=initService.getUser(email,password);if(user!=null){logger.info(user.getEmail()+"通过COOKIE登录..");session=((HttpServletRequest)request).getSession(true);session.setAttribute(Constants.USER,user);}}}@Overridepublicvoidinit(FilterConfigarg0)throwsServletException{}}

解决方案五:
我用Filter写了一个登录过滤器,session还是获取不了。然后我又检查了其他的session使用,都可以,唯独在ACTION里面的session设置后,在其他任何地方都无法获取session。
解决方案六:
一个过滤写这么麻烦直接用javax.servlet.Filter;这个接口
解决方案七:
我放弃了struts2了

时间: 2024-10-23 23:19:24

struts2拦截器获取HTTPsession失败的相关文章

JavaWeb中Struts2拦截器深入分析(一)_java

一.struts2中的拦截器(框架功能核心) 1.过滤器VS拦截器 过滤器VS拦截器功能是一回事.过滤器是Servlet规范中的技术,可以对请求和响应进行过滤. 拦截器是Struts2框架中的技术,实现AOP(面向切面)的编程思想,是可插拔的, 可以对访问某个 Action 方法之前或之后实施拦截. 拦截器栈(Interceptor Stack): 将拦截器按一定的顺序联结成一条链. 在访问被拦截的方法时, Struts2拦截器链中的拦截器就会按其之前定义的顺序被依次调用 Struts2执行原理

package-ssh的struts2拦截器拦截请求后页面为什么没有跳转

问题描述 ssh的struts2拦截器拦截请求后页面为什么没有跳转 我在struts.xml里把拦截器添加到了新的拦截器栈,命名了一个package名,然后我在一个子的struts-action-index.xml里继承了这个package做登录验证,并且程序执行时已经进入了拦截器类,并且执行完了类里的代码,返回了Action.Login,为什么通过全局返回处理页面没有跳转到登录页面 <package name=""struts-default-json""

遍历-Struts2拦截器记录日志出现一些bug

问题描述 Struts2拦截器记录日志出现一些bug 自己在写一个小工程,想用拦截器实现记录日志的功能,就是没点一次操作记录一条日志,拦截器配好了,但是每次操作都会记录两条一样的数据,我Strut.xml是method跳method,(比 如先更改数据在遍历所有数据)如果改成method的跳jsp会记录一条更改数据操作,,但是感觉这样展现效果不是很好,用debug调试点一次方法拦截器走了两次,有没有好点的解决方法,在线等 解决方案 http://blog.sina.com.cn/s/blog_5

struts2拦截器的问题获得的我拦截每个类下面每个方法的“参数类型”和“实参”

问题描述 struts2拦截器的问题获得的我拦截每个类下面每个方法的"参数类型"和"实参" 定义好struts2的全局拦截器之后 怎么在代码里面获得的我拦截每个类下面每个方法的"参数类型"和"实参"

javaweb-关于Struts2拦截器问题。

问题描述 关于Struts2拦截器问题. 按网上说的,我可以实现一个action的拦截了: 可是我想 把 某个路径下的action全部拦截,怎样写?我不可能逐个逐个action都去给它配置个拦截器吧? 网上搜索无果,跪求大神给个demo. 解决方案 可以看下这个http://www.blogjava.net/baoyaer/articles/120028.html/拦截的就是你的项目根目录下的所有路径 解决方案二: 在写上传文件的程序时,出现了异常,引发了我对Struts2上传文件的过程的Deb

Struts2拦截器---intercept()方法返回值

问题描述 Struts2拦截器---intercept()方法返回值 Struts2拦截器方面的intercept()方法的返回值有什么用?

struts2.0-Struts2拦截器Struts2拦截器Struts2拦截器Struts2拦截器

问题描述 Struts2拦截器Struts2拦截器Struts2拦截器Struts2拦截器 请问谁有Struts2拦截器学习的详细资料,请问谁有Struts2拦截器学习的详细资料,感谢哈 解决方案 ? Struts2拦截器 ? ? 一.什么是拦截器? 1.拦截器,在AOP(Aspect-Oriented Programming<面向切面编程>)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作.拦截是AOP的一种实现策略. 在Webwork的中文文档的解释为--拦截器是动态

struts2 拦截器 ajax-struts2 拦截器如何获得ajax传来的参数

问题描述 struts2 拦截器如何获得ajax传来的参数 如题,已知必定是ajax提交,如何在拦截器里获得参数.... 解决方案 如何struts2拦截器传参,Action通过getter获得struts2拦截器 获得请求方法名+获得请求参数 解决方案二: 用Action,继承自ActionSupport

struts2 拦截器不起作用

问题描述 自定义了判断用户时候登陆的拦截器,并配置只一次执行action,拦截器不起作用连着两次执行action,拦截器才会起作用比如,通过login.html登陆后,输入list.action的地址,会返回登陆界面,但是拦截器程序没有输出(我在里面有print输出)如果连着两次输入list.action的话,才会显示内容求大神解答struts2拦截器配置<interceptors><interceptorname="authority"class="int