struts.xml如下:
<struts>
<package name="struts2" extends="struts-default">
<interceptors>
<!--定义权限验证拦截器-->
<interceptor name="myAuthorization"
class="com.pb.struts2.interceptor.AuthorizationInterceptor">
</interceptor>
<!--定义拦截器栈-->
<interceptor-stack name="myStack">
<interceptor-ref name="defaultStack"/>
<interceptor-ref name="myAuthorization"/>
</interceptor-stack>
</interceptors>
<!-- 省略-->
<action name="security" >
<result>/WEB-INF/page/security.jsp</result>
<interceptor-ref name="myStack"/>
</action>
</package>
</struts>
<struts>
<package name="struts2" extends="struts-default">
<interceptors>
<!--定义权限验证拦截器-->
<interceptor name="myAuthorization"
class="com.pb.struts2.interceptor.AuthorizationInterceptor">
</interceptor>
<!--定义拦截器栈-->
<interceptor-stack name="myStack">
<interceptor-ref name="defaultStack"/>
<interceptor-ref name="myAuthorization"/>
</interceptor-stack>
</interceptors>
<!-- 省略-->
<action name="security" >
<result>/WEB-INF/page/security.jsp</result>
<interceptor-ref name="myStack"/>
</action>
</package>
</struts>
存放重要机密信息,未经登录直接访问,将导致严重后果。
//获取session中保持的用户信息
Map session = invocation.getInvocationContext().getSession();
User user = (User)session.get("user");
if (user == null) {
//如果用户尚未登录,返回到登录页面
return Action.LOGIN;
} else {
//如果用户已经登录,继续执行剩余的拦截器和Action
return invocation.invoke();
}
}
}
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
AuthorizationInterceptor.java类中return Action.LOGIN是什么意思?
返回到哪里去了
是不是写错了,应该是返回一个网址login.action,然后跳转的这个网址
否则Action是com.opensymphony.xwork2.Action类,Action.LOGIN是个什么东西?静态常量?struts核心不可能有个LOGIN常量吧?奇怪的是return Action.LOGIN这一行eclipse居然没报错,返回字符串应该写成 "Action.LOGIN" 有引号啊前面struts.xml的package子标签下省略了一部分如下 <!-- 定义全局结果 -->
<global-results>
<result name="login" type="redirect">login.html</result>
</global-results>
<action name="login" class="com.pb.struts2.action.LoginAction">
<result name="success">success.jsp</result>
<result name="error">error.jsp</result>
</action>
<action name="security" >
<result>/WEB-INF/page/security.jsp</result>
<interceptor-ref name="myStack"/>
</action>
根据这个 <result name="login" type="redirect">login.html</result>可知,当没有登录的时候返回到login.html