Spring MVC interceptors response redirects Can not forward after response has beencommitted

Copyright: please indicate the source https://blog.csdn.net/EdwardDrew/article/details/77506458

error code:

public class InitialPwdInterceptor extends HandlerInterceptorAdapter {

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

        String userName = SsoUserUtil.getUserFromSession(request.getSession());
        if (userName != null) {
            String DbPwd = SsoService.Instance().getSsoPwdByName(userName);
            String InitialPwd = MD5Util.md5Hex("123456");
            if (DbPwd.equals(InitialPwd)) {
                //如果密码没修改重定向到修改密码
                response.sendRedirect("/v2/common/teacherPwd.html");
            }
        }
        return true;
    }

}

错误信息:java.lang.IllegalStateException: Cannot forward after response has been committed

The reason: response duplicate submission

Modified Code 1:

public class InitialPwdInterceptor extends HandlerInterceptorAdapter {

    @Override
    public boolean preHandle(HttpServletRequest request,
                             HttpServletResponse response, Object handler) throws Exception {
        String userName = SsoUserUtil.getUserFromSession(request.getSession());
        if (userName != null) {
            String DbPwd = SsoService.Instance().getSsoPwdByName(userName);
            String InitialPwd = MD5Util.md5Hex("123456");
            if (DbPwd.equals(InitialPwd)) {
                //如果密码没修改重定向到修改密码
                response.sendRedirect("/v2/common/teacherPwd.html");
                return false;
            }
        }
        return true;
    }

}

Error: infinite loop
reason: Redirect success, but did not return true;

Change Password 2:

public class InitialPwdInterceptor extends HandlerInterceptorAdapter {

    @Override
    public boolean preHandle(HttpServletRequest request,
                             HttpServletResponse response, Object handler) throws Exception {
        String url = request.getServletPath();
        if ("/v2/common/teacherPwd.html".equals(url)) {
            //如果是老师修改密码页面了,直接过
            return Boolean.TRUE;
        }
        String userName = SsoUserUtil.getUserFromSession(request.getSession());
        if (userName != null) {
            String DbPwd = SsoService.Instance().getSsoPwdByName(userName);
            String InitialPwd = MD5Util.md5Hex("123456");
            if (DbPwd.equals(InitialPwd)) {
                //如果密码没修改重定向到修改密码
                response.sendRedirect("/v2/common/teacherPwd.html");
                return false;
            }
        }
        return true;
    }

}

success

Thoughts: To understand the use of spring mvc interceptor HandlerInterceptor.

Guess you like

Origin blog.csdn.net/EdwardDrew/article/details/77506458
Recommended