一个会话验证功能, 如果没有用户登录或者在线超时(10分钟)就注销.
下面是这个interceptor内容
public class AuthorizationInterceptor extends AbstractInterceptor { private static final long serialVersionUID = 4502697384032660168L;
/**
* 超时时间,单位millisecond,默认10分钟。
*/
private static final long TIME_OUT_INTERVAL = 600000L;
@Override
public String intercept(ActionInvocation ai) throws Exception {
Map session = ai.getInvocationContext().getSession();
//判断是否登录。
if(session.get("userId") == null){
return Action.LOGIN;
}else{
//判断是否超时
long startTime = (Long)session.get("startTime");
long interval = System.currentTimeMillis() - startTime;
if(interval > TIME_OUT_INTERVAL){
session.clear();
return Action.LOGIN;
}else{
//没有超时,重新设置计时开始时间
session.put("startTime", System.currentTimeMillis());
//调用Action
return ai.invoke();
}
}
}}
而Action内容是:
public class UserSubsystems extends ActionSupport implements SessionAware { private static final long serialVersionUID = -8136997656959262253L; private SystemService systemService;
@SuppressWarnings("unchecked")
private Map session;
private List<Subsystem> subsystems;
public List<Subsystem> getSubsystems() {
Long userId = (Long)session.get("userId");
return this.systemService.getSubsystems(userId);
}
@SuppressWarnings("unchecked")
public void setSession(Map session) {
this.session = session;
} public void setSystemService(SystemService systemService) {
this.systemService = systemService;
}}
我的主界面JSP中需要使用该Action中的subsystems属性, 但是使用interceptor后就出问题了.
希望大家帮忙看看, 万分感激.
下面是这个interceptor内容
public class AuthorizationInterceptor extends AbstractInterceptor { private static final long serialVersionUID = 4502697384032660168L;
/**
* 超时时间,单位millisecond,默认10分钟。
*/
private static final long TIME_OUT_INTERVAL = 600000L;
@Override
public String intercept(ActionInvocation ai) throws Exception {
Map session = ai.getInvocationContext().getSession();
//判断是否登录。
if(session.get("userId") == null){
return Action.LOGIN;
}else{
//判断是否超时
long startTime = (Long)session.get("startTime");
long interval = System.currentTimeMillis() - startTime;
if(interval > TIME_OUT_INTERVAL){
session.clear();
return Action.LOGIN;
}else{
//没有超时,重新设置计时开始时间
session.put("startTime", System.currentTimeMillis());
//调用Action
return ai.invoke();
}
}
}}
而Action内容是:
public class UserSubsystems extends ActionSupport implements SessionAware { private static final long serialVersionUID = -8136997656959262253L; private SystemService systemService;
@SuppressWarnings("unchecked")
private Map session;
private List<Subsystem> subsystems;
public List<Subsystem> getSubsystems() {
Long userId = (Long)session.get("userId");
return this.systemService.getSubsystems(userId);
}
@SuppressWarnings("unchecked")
public void setSession(Map session) {
this.session = session;
} public void setSystemService(SystemService systemService) {
this.systemService = systemService;
}}
我的主界面JSP中需要使用该Action中的subsystems属性, 但是使用interceptor后就出问题了.
希望大家帮忙看看, 万分感激.
解决方案 »
- Java项目在Web服务器中发布的机制?
- 高分求教。
- 能不能将类的实例转换为Object型
- Collections.sort
- struts关于在列表页面显示数据对应的名称而不是值的问题
- WebSphere 与JDOM的问题,急,各位大侠帮忙!
- 从朋友那儿抱来一大堆j2ee的书,想学j2ee,不知如何下手?
- Tomcat5中关于 oracle驱动 classes12.jar 路径问题
- 真郁闷:TOMCAT配置出现这样的问题:可以打开HTM文件,但是一碰到JSP就报错(100分奉上解决者,分已经给出,别处结贴)
- weblogic的连接池到底怎么用呀?
- Spring+struts+hibernate多列模糊查询怎么玩?
- webservices的wsdl文件中显示为,in0、in1的问题
当使用者没有给Action注册interceptor的时候Struts2默认使用自己的拦截器栈实现很多功能当你给Action注册interceptor后,默认拦截器的功能被取消了你需要在Action里再次显式的定义使用默认拦截器栈我想应该是这个问题
<interceptors>
<interceptor name="authorization" class="authorizationInterceptor"></interceptor>
<interceptor name="log" class="logInterceptor"></interceptor>
<interceptor-stack name="authorizationAndLog">
<interceptor-ref name="authorization"></interceptor-ref>
<interceptor-ref name="log"></interceptor-ref>
</interceptor-stack>
</interceptors>
<action name="UserSubsystems" class="userSubsystemsAction">
<interceptor-ref name="authorization"></interceptor-ref>
<result>/crm/UserSubsystems.jsp</result>
</action>
<!-- 其他action配置-->由于采用了spring + struts, 所以上面配置文件中的authorizationInterceptor和userSubsystemsAction的在spring的bean工厂里声明了
在spring的applicationContext.xml中<bean id="authorizationInterceptor"
class="cn.edu.software.nju.crm.interceptor.AuthorizationInterceptor">
</bean>
<bean id="userSubsystemsAction"
class="cn.edu.software.nju.crm.action.UserSubsystems"
scope="prototype">
<property name="systemService" ref="systemService"/>
</bean>
<!-- 其他bean-->还需要什么么? 先谢谢tzb08了, :-)
另: defaultStack和我自己定义的interceptor的顺序上有什么要求么? 我自己试了一下, 好像没什么区别.
要是没什么其他问题, 我今天就结贴, 呵呵. 再次感谢上面的朋友
关于拦截器的顺序我还没有试过我想如果我们自己定义的拦截器和Struts2提供的拦截器之间没有耦合的话顺序应该不会造成问题