从过滤器

时间:2017-06-29 11:46:32

标签: java spring spring-mvc web

我正在使用java和Spring MVC编写应用程序。我的范围是我的网址包含像http://localhost:8080/School/en/xxx/ ...这样的语言。 在我的应用程序中,我使用下一个代码:

控制器servlet.xml中

<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver"/>

的web.xml

<filter>
    <filter-name>URLFilter</filter-name>
    <filter-class>filter.URLFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>URLFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

过滤

public void doFilter(ServletRequest hsRequest, ServletResponse hsResponse, FilterChain filterChain) throws IOException, ServletException {
    final HttpServletRequest request = (HttpServletRequest) hsRequest;
    final HttpServletResponse response = (HttpServletResponse) hsResponse;

    String servletPath = request.getRequestURI().substring(request.getContextPath().length());
    List<String> langList = new ArrayList<String>();
    langList.add("/it/");
    langList.add("/en/");
    for (String lang : langList) {
        if (StringUtils.startsWithIgnoreCase(servletPath, lang)) {
            filterChain.doFilter(hsRequest, hsResponse);
            return;
        }
    }
    String string = request.getContextPath() + "/en".concat(servletPath);
    response.sendRedirect(string);
}

拦截器:

public class LangInterceptor extends HandlerInterceptorAdapter {

@Autowired
SessionLocaleResolver sessionLocaleResolver;

@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    String language = request.getServletPath().substring(1, 3);
    Locale locale = new Locale(language);
    sessionLocaleResolver.setLocale(request, response, locale);
    return true;
}

我想下一个行为是:

  1. 用户引入了以下URL:“https:// localhost:8080 / School /” - 过滤器找不到任何“/ it /”或“/ en /”并默认添加“/ en /”而不是重定向到https:// localhost:8080 / School / en /哪里下次会发现没关系。
  2. 用户介绍如下URL:htt:// localhost:8080 / School / add - 过滤器找不到任何“/ it /”或“/ en /”并在重定向到httр后默认添加“/ en /” :// localhost:8080 / School / en / add在哪里可以找到这样的URL。
  3. 用户介绍以下URL:htt:// localhost:8080 / School / en1 / add - 过滤器找不到任何“/ it /”或“/ en /”并默认添加“/ en /”重定向到https:// localhost:8080 / School / en / en1 / add后哪里找不到这样的URL并重定向到404.jsp是不行的。
  4. 因此,在重定向之前,我需要在“/ en”/之后验证网址中的内容,因此我需要@RequestMapping @Controller的值列表。我尝试使用RequestMappingHandlerMapping,但这是不可能的,因为在过滤级别bean没有初始化。

    我该如何解决这个问题?

0 个答案:

没有答案