我目前正在学习 Struts 2,并且我目前正在构建一个简单的应用程序,其中未经验证的用户被重定向到登录表单。
我有一个登录表单和操作功能,它获取用户凭据,验证它们并将用户对象存储在会话中但是我现在试图在登录发生之前阻止对页面的访问,我正在尝试使用拦截器来做到这一点.
我的问题是我编写了一个拦截器来检查用户对象是否已保存在会话中,但如果没有,我想重定向到登录页面,并且在不绕过 struts 和使用HttpServletResponse.sendRedirect 方法
配置:
<package name="mypackage" extends="struts-default" namespace="/admin">
<interceptors>
<interceptor name="login" class="my.LoginInterceptor" />
</interceptors>
<default-interceptor-ref name="login"/>
<action name="login" class="my.LoginAction">
<result name="input">/admin/login.jsp</result>
<result name="success" type="redirect">/admin</result>
</action>
<action name="private" class="my.PrivateAction">
<result>/admin/private.jsp</result>
</action>
</package>
拦截器代码:
@Override
public String intercept(ActionInvocation inv) throws Exception {
Map<String, Object> session = inv.getInvocationContext().getSession();
Object user = session.get("user");
if(user == null) {
// redirect to the 'login' action here
}
else {
return inv.invoke();
}
}