竟然有这样的问题发生我的身上,搞一天了还没调试出来。我写一个登录拦截器来拦截所以有action在没登录情况下访问action(除登录action外)都跳到登录页。诡异的问题在:登录拦截里取session值时,IE6、IE7、TT取到的值是null;IE5、火狐、谷歌、Opera、Safari都可以取到session值!所以我写的拦截器在IE6、IE7、TT浏览器都跳到登录页,其他浏览器都正常?我在网上找了很久都没有这方面的资料,那应该证明你们都没有遇到过这样的问题。这次真的完蛋了!第一次遇到这样的问题!我把代码贴出来!我只知道两种取session值方法(在拦截器类中)
方法1:ActionContext ctx = invocation.getInvocationContext();
Map session = ctx.getSession();
String adminName = (String) session.get("curAdminName");方法2: String adminName = (String) ServletActionContext.getRequest().getSession().getAttribute("curAdminName");
登录拦截器package com.tfl.shop_manage.common;import java.util.Map;import org.apache.log4j.Logger;
import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
import com.tfl.shop_manage.action.AdminLoginAction;
public class AdminActionInterceptor extends AbstractInterceptor { private Logger logger = Logger.getLogger("AdminActionInterceptor");
@Override
public String intercept(ActionInvocation invocation) throws Exception { ActionContext ctx = invocation.getInvocationContext();
Map session = ctx.getSession();
String adminName = (String) session.get("curAdminName");
// String adminName = (String) ServletActionContext.getRequest().getSession().getAttribute("curAdminName1");
System.out.println("loginName="+adminName);
System.out.println("LoginAction.calss="+AdminLoginAction.class);
System.out.println("invocation.getAction().getClass="+invocation.getAction().getClass());
if(null != adminName){
logger.info("if");
return invocation.invoke();
}else{
//登录页 session中没值
if(AdminLoginAction.class==invocation.getAction().getClass()){
return invocation.invoke();
}
logger.info("else");
logger.info("已拦截器");
return "login"; //在struts.xml里定义一个 <global-results>
}
}}struts.xml<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
"http://struts.apache.org/dtds/struts-2.1.dtd"><struts> <!-- 拦截没登录的action -->
<package name="baseAction" extends="struts-default">
<interceptors>
<interceptor name="adminActionInter" class="com.tfl.shop_manage.common.AdminActionInterceptor"></interceptor>
<interceptor-stack name="adminActionInterStack">
<interceptor-ref name="adminActionInter"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="adminActionInterStack"></default-interceptor-ref>
<global-results>
<result name="login">/res/login.jsp</result>
</global-results>
</package>
<!-- 管理员登录 tf_admin -->
<package name="login" extends="baseAction" namespace="/">
<action name="login_*" class="adminLoginAction" method="{1}">
<result name="loginSuccess">/index.jsp</result>
<result name="loginFail">/res/login.jsp</result>
<result name="exitSuccess">/res/login.jsp</result>
</action>
</package>
<!-- 文章管理 tf_article -->
<package name="artManage" extends="baseAction" namespace="/">
<action name="artManage_*" class="articleManageAction" method="{1}">
<result name="artListSuccess">/res/article/articleList.jsp</result>
<result name="artSearchSuccess">/res/article/articleSearch.jsp</result>
<result name="artViewSuccess">/res/article/articleView.jsp</result>
<result name="showArtAddSuccess">/res/article/articleAdd.jsp</result>
<result name="artAddSuccess">/res/article/artAddSuccess.jsp</result>
<result name="artUpdateView">/res/article/articleUpdateView.jsp</result>
<result name="artUpdateSuccess">/res/article/artAddSuccess.jsp</result>
<result name="artDeleteSuccess">/res/article/artDelSuccess.jsp</result>
</action>
</package>
</struts>
方法1:ActionContext ctx = invocation.getInvocationContext();
Map session = ctx.getSession();
String adminName = (String) session.get("curAdminName");方法2: String adminName = (String) ServletActionContext.getRequest().getSession().getAttribute("curAdminName");
登录拦截器package com.tfl.shop_manage.common;import java.util.Map;import org.apache.log4j.Logger;
import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
import com.tfl.shop_manage.action.AdminLoginAction;
public class AdminActionInterceptor extends AbstractInterceptor { private Logger logger = Logger.getLogger("AdminActionInterceptor");
@Override
public String intercept(ActionInvocation invocation) throws Exception { ActionContext ctx = invocation.getInvocationContext();
Map session = ctx.getSession();
String adminName = (String) session.get("curAdminName");
// String adminName = (String) ServletActionContext.getRequest().getSession().getAttribute("curAdminName1");
System.out.println("loginName="+adminName);
System.out.println("LoginAction.calss="+AdminLoginAction.class);
System.out.println("invocation.getAction().getClass="+invocation.getAction().getClass());
if(null != adminName){
logger.info("if");
return invocation.invoke();
}else{
//登录页 session中没值
if(AdminLoginAction.class==invocation.getAction().getClass()){
return invocation.invoke();
}
logger.info("else");
logger.info("已拦截器");
return "login"; //在struts.xml里定义一个 <global-results>
}
}}struts.xml<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
"http://struts.apache.org/dtds/struts-2.1.dtd"><struts> <!-- 拦截没登录的action -->
<package name="baseAction" extends="struts-default">
<interceptors>
<interceptor name="adminActionInter" class="com.tfl.shop_manage.common.AdminActionInterceptor"></interceptor>
<interceptor-stack name="adminActionInterStack">
<interceptor-ref name="adminActionInter"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="adminActionInterStack"></default-interceptor-ref>
<global-results>
<result name="login">/res/login.jsp</result>
</global-results>
</package>
<!-- 管理员登录 tf_admin -->
<package name="login" extends="baseAction" namespace="/">
<action name="login_*" class="adminLoginAction" method="{1}">
<result name="loginSuccess">/index.jsp</result>
<result name="loginFail">/res/login.jsp</result>
<result name="exitSuccess">/res/login.jsp</result>
</action>
</package>
<!-- 文章管理 tf_article -->
<package name="artManage" extends="baseAction" namespace="/">
<action name="artManage_*" class="articleManageAction" method="{1}">
<result name="artListSuccess">/res/article/articleList.jsp</result>
<result name="artSearchSuccess">/res/article/articleSearch.jsp</result>
<result name="artViewSuccess">/res/article/articleView.jsp</result>
<result name="showArtAddSuccess">/res/article/articleAdd.jsp</result>
<result name="artAddSuccess">/res/article/artAddSuccess.jsp</result>
<result name="artUpdateView">/res/article/articleUpdateView.jsp</result>
<result name="artUpdateSuccess">/res/article/artAddSuccess.jsp</result>
<result name="artDeleteSuccess">/res/article/artDelSuccess.jsp</result>
</action>
</package>
</struts>
解决方案 »
- 断网的情况下,启动tomcat用IE打不开tomcat主页,连上网就能打开
- 如何用openldap配置sasl认证
- 请教,关于@PostConstruct 注解,spring配置文件中配置了default-lazy-init="true"怎么办
- 关于<html:radio/>标签显示的问题?
- mybatis,struts2,spring增删改查的整合怎么写呢
- 问一hibernate难提,高手请进
- 一怪问题
- 求教:如何使用InstallAnywhere 中的“Extract To File”功能
- hibernate连接mysql时自动编号问题??请大家帮忙!!
- 我的weblogic81是不是有问题啊?
- struts2+spring+Junit4中ApplicationContext获取失败
- struts2与OpenSessionInViewFilter
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<welcome-file-list>
<welcome-file>/res/login.jsp</welcome-file>
</welcome-file-list><!-- 500 错误 跳到登录页 -->
<!--
<error-page>
<error-code>500</error-code>
<location>/res/login.jsp</location>
</error-page>
--> <!-- 400 错误 跳到登录页 -->
<!--
<error-page>
<error-code>404</error-code>
<location>/res/login.jsp</location>
</error-page>
-->
<!-- spring配置 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
<!-- default: /WEB-INF/applicationContext.xml -->
</listener> <context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/classes/applicationContext.xml</param-value>
</context-param>
<!-- 中文过滤器 -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter><filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- session配置 session在jsp用完后再关闭-->
<filter>
<filter-name>openSessionInView</filter-name>
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
<init-param>
<param-name>sessionFactoryBeanName</param-name>
<param-value>sf</param-value>
</init-param>
</filter><filter-mapping>
<filter-name>openSessionInView</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> <!-- 管理员过滤器jsp页面 -->
<!--<filter>
<filter-name>adminFilter</filter-name>
<filter-class>com.tfl.shop_manage.common.AdminFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>adminFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
<url-pattern>*.htm</url-pattern>
</filter-mapping>
--><!--url重写 -->
<filter>
<filter-name>UrlRewriteFilter</filter-name>
<filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>UrlRewriteFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- struts2配置 -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
<!--<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
-->
</filter><filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST </dispatcher>
<dispatcher>FORWARD </dispatcher>
<dispatcher>INCLUDE </dispatcher>
</filter-mapping>
</web-app>
兼容问题都会出在JS身上, 你可以跟踪下
<action name="artManage_*" class="articleManageAction" method="{1}">
<result name="artListSuccess">/res/article/articleList.jsp</result>
<result name="artSearchSuccess">/res/article/articleSearch.jsp</result>
<result name="artViewSuccess">/res/article/articleView.jsp</result>
<result name="showArtAddSuccess">/res/article/articleAdd.jsp</result>
<result name="artAddSuccess">/res/article/artAddSuccess.jsp</result>
<result name="artUpdateView">/res/article/articleUpdateView.jsp</result>
<result name="artUpdateSuccess">/res/article/artAddSuccess.jsp</result>
<result name="artDeleteSuccess">/res/article/artDelSuccess.jsp</result>
</action>
</package>在红色的地方不要用匹配符,还是每个方法都配置一下,代码没什么问题,我也没遇到过,你改一下试试看。
http://www.java3z.com/cwbwebhome/article/article2/2933.html
你看看你这几个浏览器。。是不是把COOKIES给禁用了