首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring Interceptor不工作JAVA

Spring Interceptor不工作JAVA
EN

Stack Overflow用户
提问于 2017-01-23 10:06:13
回答 1查看 84关注 0票数 0

我的项目中有这两个类。当我在配置中使用它们时,我不能提交项目的登录表单。在填写我的凭据并单击login之后,我尝试调试应用程序,并意识到表单没有命中发出post请求的methot。我不知道为什么,但是当从配置中删除拦截器时,我的登录没有问题。请帮帮忙。

SessionInterceptor.class

代码语言:javascript
复制
 public class SessionInterceptor extends HandlerInterceptorAdapter {

        @Autowired
        private SessionManager sm;

        @Autowired
        private MessageSourceAccessor msa;

        @SuppressWarnings("deprecation")
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
                throws Exception {

            String return_url = request.getRequestURL().toString() + "?" + request.getQueryString();
            return_url = return_url.replace(msa.getMessage("config.baseurl"), "");
            if (!request.getRequestURI().contains("login")) {
                if (sm.get(request) == null) {
                    response.sendRedirect(
                            msa.getMessage("config.baseurl") + "/login?return=" + URLEncoder.encode(return_url));
                    return false;
                }
            }
            return true;
        }

    }

SessionManager.class

代码语言:javascript
复制
@Component
public class SessionManager {

    public static final String ProfileUser = "profileuser";

    public UserModel get(HttpServletRequest request) {
        HttpSession session = null;
        session = request.getSession(false);

        if (session == null)
            return null;
        return (UserModel) session.getAttribute(ProfileUser);
    }

    public void set(HttpServletRequest request, UserModel auth) {
        HttpSession session = null;
        session = request.getSession(false);

        if (session == null)
            return;

        session.setAttribute(ProfileUser, auth);
    }

    public void remember(HttpServletRequest request) {
        HttpSession session = null;
        session = request.getSession(false);

        if (session != null)
            session.invalidate();

        session.setMaxInactiveInterval(60 * 60 * 60);
    }

    public void init(HttpServletRequest request, UserModel auth, Boolean remember) {
        HttpSession session = null;
        session = request.getSession(false);

        if (session != null)
            session.invalidate();

        session = request.getSession(true);
        if (remember)
            session.setMaxInactiveInterval(60 * 60 * 60 * 60);
        else
            session.setMaxInactiveInterval(1800);
        session.setAttribute(ProfileUser, auth);
    }

    public void destroy(HttpServletRequest request) {
        HttpSession session = null;
        session = request.getSession(false);

        if (session == null)
            return;

        session.removeAttribute(ProfileUser);
        session.invalidate();
    }
EN

回答 1

Stack Overflow用户

发布于 2017-01-23 13:50:42

你能提供你的全部配置吗?从你的代码中可以胡乱猜测:

代码语言:javascript
复制
if (!request.getRequestURI().contains("login")) {
    if (sm.get(request) == null) {
        response.sendRedirect(
                msa.getMessage("config.baseurl") + "/login?return=" + URLEncoder.encode(return_url));
        return false;
    }
}

现在,如果您的sm.get(request) == null,那么重定向将发生,因此调用将不会去控制器。

重定向意味着呼叫再次转到客户端,从客户端将向所述url发起新的呼叫。

如果您的@Autowire在这种情况下不工作,sm将为空。而sm.get(request) == null会抛出NullPointerException。再一次,调用不会转到控制器。

但可以肯定的是,提供您的配置。或者在拦截器中调试你的代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41798298

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档