2

我有一个使用 Spring Security 的 Spring MVC webapp。我想添加“商店已关闭”功能 - 即,如果我将商店设置为关闭,无论用户尝试在我的网站上导航到哪里,他们最终都会在页面上显示“商店已关闭”。

我已经实现了一个安全过滤器,如下所示(并且可以很好地连接它):

public class ClosedFilter extends OncePerRequestFilter {

@Override
protected void doFilterInternal(HttpServletRequest req,
        HttpServletResponse response,
        FilterChain chain) throws ServletException, IOException {

    if(storeIsClosed()) {
        //do something useful here
    }else {
        chain.doFilter(req, response);
            }

}

}

但是我不确定在“//在这里做一些有用的事情”位中放什么。我努力了:

throw new StoreIsClosedException();  //extends RuntimeException

但我无法将我的异常映射到我的视图。我也试过

response.redirect("myClosedView");

没有运气。我想要的是概念上的东西:

   return new ModelAndView("closed");

谢谢。

4

1 回答 1

2

我最终得到了一个解决方案,我将过滤器更改为:

public class ClosedFilter extends OncePerRequestFilter {

@Override
protected void doFilterInternal(HttpServletRequest req,
        HttpServletResponse response,
        FilterChain chain) throws ServletException, IOException {

    if (isClosed()) {
        final String path = req.getContextPath()+"/closed.do";
        if(!path.equals(req.getRequestURI())) {
            response.sendRedirect(path);
            return;
        }
    }
    chain.doFilter(req, response);
}


}

然后将其添加到我的 security.xml

<intercept-url pattern="/closed.do*" access="permitAll"/>
于 2012-10-11T20:02:26.810 回答