账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    【新手】struts2拦截器不生效问题求助
    • 见心书画许老师187533751612020-01-21 00:00
    86
    0

    AuthInterceptor

    package dzxczx.blog.admin;
    
    import com.opensymphony.xwork2.interceptor.Interceptor;
    import com.opensymphony.xwork2.ActionInvocation;
    import com.opensymphony.xwork2.ActionContext;
    import java.util.Map;
    public class AuthInterceptor implements Interceptor{
        public void init() {
            System.out.println("初始化");
        }
        
        public String intercept(ActionInvocation invocation) throws Exception{
            ActionContext ctx = ActionContext.getContext();
            Map<String, Object> session = ctx.getSession();
            System.out.print(1);
            if ((String)session.get("admin") != null) {
                return invocation.invoke();
            } else {
                return "error";
            }
        }
        public void destroy() {
            
        }
    }
    

    web.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                          http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
        version="3.0" metadata-complete="true">
        <filter>
            <filter-name>struts2</filter-name>
            <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
        </filter>
        <filter-mapping>
            <filter-name>struts2</filter-name>
            <url-pattern>*.action</url-pattern>
        </filter-mapping>
    </web-app>

    struts.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">
    <struts>
        <constant name="struts.devMode" value="true" />
        <constant name="struts.action.extension" value="action" />
        
        <package name="index" extends="struts-default">
            <action name="index" class="dzxczx.blog.IndexAction">
                <result name="success">/WEB-INF/content/index.jsp</result>
            </action>
        </package>
        <package name="admin" namespace="admin" extends="struts-default">
            <interceptors>
                <interceptor name="dzxczxauth" class="dzxczx.blog.admin.AuthInterceptor"></interceptor>
                <interceptor-stack name="dzxczxStack">
                    <interceptor-ref name="dzxczxauth"/>
                    <interceptor-ref name="defaultStack"/>
                </interceptor-stack>
            </interceptors>
            <action name="index" class="dzxczx.blog.admin.IndexAction">
                <result name="success">/WEB-INF/content/admin/index.jsp</result>
                <result name="error">/WEB-INF/content/error.jsp</result>
                <interceptor-ref name="dzxczxStack" />
            </action>
            <action name="login" class="dzxczx.blog.admin.LoginAction">
                <result name="success">/WEB-INF/content/admin/login.jsp</result>
            </action>
        </package>
    </struts>

    访问admin/index.action 控制台能输出自定义拦截器里的init方法的内容 但是 intercept方法不会输出东西 研究了好一会没研究明白 求助各位大神

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 安静的离开了 普通会员 1楼

      在Struts2中,拦截器是用于处理请求和响应的一种机制。但是,如果拦截器不生效,可能是由于以下几个原因:

      1. 检查代码:首先,检查你的代码,确保拦截器的配置正确,没有语法错误。如果你在拦截器中使用了占位符(${}),确保它们已经被正确地替换。

      2. 配置拦截器:检查你的拦截器配置是否正确。例如,如果你的拦截器是在处理器中定义的,确保处理器已经正确地添加到你的配置文件中。

      3. 检查HTTP状态码:在拦截器中,你可以检查HTTP状态码。如果状态码不是200,那么拦截器可能不生效。

      4. 检查请求:检查你的请求是否正确。如果你的请求中包含了错误的参数,那么拦截器可能不生效。

      5. 使用日志:在你的代码中,使用日志来跟踪你的请求和响应。如果拦截器没有生效,那么你可能需要查看日志来确定问题所在。

      6. 更新Struts2版本:如果你的Struts2版本过旧,可能已经不再支持某些新的功能,这可能会导致你的拦截器不生效。

      希望以上信息能帮到你。如果你仍然无法解决问题,可能需要更详细的错误信息或者寻求Struts2的社区帮助。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部