在设置登录拦截器的时候, 拦截了一部分方法 可是当拦截成功后跳转到登录界面的时候,提交登录还是被拦截,我已经设置了excludeMethods 参数,可是不起作用,请大牛们帮看看 现在贴代码<package name="shop.front" extends="shop-default">
<!-- 配置拦截器 -->
<interceptors>
<interceptor name="AuthorizationInterceptor" class="com.ideal.action.interceptor.AuthorizationInterceptor">
<param name="excludeMethods">login</param>
</interceptor>
<interceptor-stack name="customerDefaultStack">
<interceptor-ref name="AuthorizationInterceptor">
</interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="customerDefaultStack"></default-interceptor-ref>
<global-results>
<result name="login">/login.jsp</result>
<result name="loginSuccess">/welcome.jsp</result>
</global-results>
<action name="index" class="com.ideal.action.basic.IndexAction">
<result>/index.jsp</result>
</action>
</package>拦截的方法 <package name="shop.order" extends="shop.front" namespace="/product">
<action name="order_*" method="{1}" class="orderAction">
<result name="add">/test.jsp</result>
</action>
</package>访问add方法可以被拦截 跳到登录页面。
拦截器代码
package com.ideal.action.interceptor;import java.util.Map;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor; public class AuthorizationInterceptor extends MethodFilterInterceptor
{
private static final long serialVersionUID = 2071704648277594728L;
public String intercept(ActionInvocation invocation) throws Exception
{
HttpServletRequest request=ServletActionContext.getRequest();
System.out.println(123);
HttpSession session=request.getSession();
//通过session 判断用户是否登录
if(session!=null && session.getAttribute("user")!=null) {
return invocation.invoke();
}
//设置客户原来请求的url地址
session.setAttribute("url", getGoingURL(request));
return Action.LOGIN;
}
private String getGoingURL(HttpServletRequest request)
{
String url=request.getHeader("Referer");
if(url==null || url.equals(""))
{
//如果请求的是ACTION 则通过该代码获取URL地址,当然可以完善其功能
url = request.getContextPath()+request.getServletPath()+"?"+request.getQueryString();
}
return url;
} @Override
protected String doIntercept(ActionInvocation invocation) throws Exception {
// TODO Auto-generated method stub
return intercept(invocation);
} }
可是在执行登录提交的方法时又被拦截了 我在excludeMethods设置了login理论上不应该呗拦截了 login在这个包中
<package name="shop.customer" extends="shop.front" namespace="/customer">
<action name="customer_*" class="customerAction" method="{1}">
<result name="registe">/registeSuccess.jsp</result>
<result name="login">/login.jsp</result>
</action>
</package>
通过customer/customer_login可以访问, 求大牛解决
<!-- 配置拦截器 -->
<interceptors>
<interceptor name="AuthorizationInterceptor" class="com.ideal.action.interceptor.AuthorizationInterceptor">
<param name="excludeMethods">login</param>
</interceptor>
<interceptor-stack name="customerDefaultStack">
<interceptor-ref name="AuthorizationInterceptor">
</interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="customerDefaultStack"></default-interceptor-ref>
<global-results>
<result name="login">/login.jsp</result>
<result name="loginSuccess">/welcome.jsp</result>
</global-results>
<action name="index" class="com.ideal.action.basic.IndexAction">
<result>/index.jsp</result>
</action>
</package>拦截的方法 <package name="shop.order" extends="shop.front" namespace="/product">
<action name="order_*" method="{1}" class="orderAction">
<result name="add">/test.jsp</result>
</action>
</package>访问add方法可以被拦截 跳到登录页面。
拦截器代码
package com.ideal.action.interceptor;import java.util.Map;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor; public class AuthorizationInterceptor extends MethodFilterInterceptor
{
private static final long serialVersionUID = 2071704648277594728L;
public String intercept(ActionInvocation invocation) throws Exception
{
HttpServletRequest request=ServletActionContext.getRequest();
System.out.println(123);
HttpSession session=request.getSession();
//通过session 判断用户是否登录
if(session!=null && session.getAttribute("user")!=null) {
return invocation.invoke();
}
//设置客户原来请求的url地址
session.setAttribute("url", getGoingURL(request));
return Action.LOGIN;
}
private String getGoingURL(HttpServletRequest request)
{
String url=request.getHeader("Referer");
if(url==null || url.equals(""))
{
//如果请求的是ACTION 则通过该代码获取URL地址,当然可以完善其功能
url = request.getContextPath()+request.getServletPath()+"?"+request.getQueryString();
}
return url;
} @Override
protected String doIntercept(ActionInvocation invocation) throws Exception {
// TODO Auto-generated method stub
return intercept(invocation);
} }
可是在执行登录提交的方法时又被拦截了 我在excludeMethods设置了login理论上不应该呗拦截了 login在这个包中
<package name="shop.customer" extends="shop.front" namespace="/customer">
<action name="customer_*" class="customerAction" method="{1}">
<result name="registe">/registeSuccess.jsp</result>
<result name="login">/login.jsp</result>
</action>
</package>
通过customer/customer_login可以访问, 求大牛解决
解决方案 »
- 关于validation.xml的问题
- JSP网页异常问题!!!! 急问!!!
- Error loading configuration file struts-default.xml - Class: com.opensymphony.xw 这是什么错误?折磨我五天了!
- 从action到页面的传值问题
- java 如何获取 响应状态
- String类型最多能接收多大字符串呀?我把5M的附件转换成base64格式的,出现java.lang.OutOfMemoryError,我用StringBuffer变量也不行呀?
- tablib标签使用的一个问题
- split的使用,立即给分
- 谁能给我讲一下“如何在win98下配置tomcat”
- 新手,配置是出了问题,请大家帮忙,就给分!
- 一个请求来时,创建的action存放在ValueStack里,valuestack是放在ActionContext里还是放在OgnlContext里?
- 为什么oracle一定要使用三层嵌套进行分页查询
你自定义的拦截器栈 名叫AuthorizationInterceptor,可见没有起作用。
修改成::
<default-interceptor-ref name="AuthorizationInterceptor"></default-interceptor-ref>
就可以了。加油~~
定义一个拦截器栈它 的范围仅仅局限于 该定义的包内,但是你的login方法,是在另一包下配置的,所以login方法的配置应该放在最上面那个包下即可。。