始终在网址中添加斜杠

时间:2018-09-28 22:54:34

标签: spring-mvc

我正在将Spring MVC与Spring Controllers一起使用。如果URL末尾不存在斜杠,我总是要添加一个斜杠。我该怎么办?

www.mysite.com/something -> www.mysite.com/something/
www.mysite.com/somethingelse/ -> www.mysite.com/somethingelse/

1 个答案:

答案 0 :(得分:0)

您可以使用HandlerInterceptor来实现:

拦截器将检查请求URI是否以斜杠结尾。 如果是这样,则处理请求,否则,将使用相同的URI加上斜杠将响应重定向。 在下面的示例中,我忽略了带有查询字符串的请求,因为我不知道如何处理这种情况。

拦截器:

@Component
public class TrailingSlashInterceptor extends HandlerInterceptorAdapter implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        if(StringUtils.isBlank(request.getQueryString()) && !request.getRequestURI().endsWith("/")) {
            response.sendRedirect(request.getRequestURL().append("/").toString());
            return false;
        }
        return true;
    }
}

在您的配置中注册并映射拦截器:

@Autowired
private TrailingSlashInterceptor trailingSlashInterceptor;

@Override
public void addInterceptors(InterceptorRegistry registry) {
    registry
        .addInterceptor(trailingSlashInterceptor)
        .addPathPatterns("/**")
        .excludePathPatterns("/static/**");
}

我注意到在您的JSP中,如果有的话,则必须使URL以斜杠开头,例如:<c:url value="/clients" />

使用此方法,所有不带斜杠的请求都将被临时重定向(302)到带斜杠的相同URI。