防止未登录进行操作 解决登录页面内嵌问题
1.进入登录的action时将登录信息保存在session里面
2.写一个拦截器如下
public class UserLoginInterceptor extends AbstractInterceptor {
@Override
public String intercept(ActionInvocation invocation) throws Exception {
ActionContext ctx = invocation.getInvocationContext();
Map session = ctx.getSession();
User user = (User)session.get("user");
if(user==null){
return "login";
}else{
return invocation.invoke();
}
}
}
3.配置拦截器
<!-- 配置一个admin-default包,包含了自己设置的用于未登录的拦截器和一些全局参数 -->
<package name="admin-default" extends="struts-default">
<interceptors>
<interceptor name="userLogin" class="com.zjh.shopping.interceptor.UserLoginInterceptor" />
<interceptor-stack name="adminDefaultStack">
<interceptor-ref name="userLogin" />
<interceptor-ref name="defaultStack" />
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="adminDefaultStack" />
<global-results>
<result name="login">/WEB-INF/admin/nosession.jsp</result>
</global-results>
</package>
4.配置需要拦截的action,将这些action放在一个或多个package里面,package的配置如下:
<package name="admin" extends="admin-default">
这个package要继承第三步配置的包
5.拦截后不直接跳转到登录页面,而是先跳到nosession.jsp页面
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<script type="text/javascript">
window.parent.location = "login.jsp";
</script>
</body>
</html>
6.这样就不会出现登陆页面内嵌的问题了