如何区分重定向:是否在HandlerInterceptorAdaptor.preHandle()中进行重定向?我需要清除每个新请求的会话属性,除了它是重定向:从控制器类。

例如

拦截器类

public class RequestInterceptor extends HandlerInterceptorAdapter {
    @Override
    public boolean preHandle(HttpServletRequest req, HttpServletResponse resp, Object handler) throws Exception {
        //CHECK whether it's a redirect:, if NO then clear session attribute.
        HttpSession session = req.getSession(false);
        session.removeAttribute("attributeKey");
    }
}


控制器类

@RequestMapping(value = "/detail", method = RequestMethod.GET)
private String viewDetails(HttpSession session, ...) {
    //program logic here
}

@RequestMapping(value = "/updatedetail", method = RequestMethod.GET)
private String updateDetails(HttpSession session, ...) {
    //program logic here
    //set session attribute
    session.setAttribute("attributeKey", someobject);

    //redirect, but i want the session attribute to be visible to the page instead of cleared by interceptor
    return "redirect:detail";
}

最佳答案

model.addAttribute("attributeKey", someObject);
return "redirect:detail";


并隐藏attributeKey

<bean id="myBean" class="org.springframework.web.servlet.view.RedirectView">
    <property name="exposeModelAttributes" value="false"/>
    <property name="url" value="/detail"/>
</bean>

10-06 08:59