簡體   English   中英

Tomcat Spring UTF-8

[英]Tomcat Spring UTF-8

我正在使用spring 4和tomcat 8.我有編碼問題。 我輸入一些值並提交表格。 在控制器中,我的參數不是UTF-8編碼。 查看控制器上的注釋。

這是我的JSP的一部分:

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" language="java" %>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> ...
    <form:form modelAttribute="category" htmlEscape="false" id="categoryUpdateForm" method="post" acceptCharset="UTF-8" cssClass="form-horizontal">
        <c:if test="${not empty message}">
            <div id="message" class="${message.type}">
                <c:out value="${message.message}" />
            </div>
        </c:if>
        <div class="form-group">
            <div class="col-md-3 text-right">
                <label>
                    Name
                </label>
            </div>
            <div class="col-md-6">
                <form:input path="name" cssClass="form-control" />
            </div>
        </div>

        <div class="form-group">
            <div class="col-md-3 text-right">
                <label>
                    Parent category
                </label>
            </div>
            <div class="col-md-6">
                <form:select path="parentId" id="parentId" class="form-control ">
                    <form:option value="" selected="true">Without category</form:option>
                    <c:if test="${not empty categories}">
                        <form:options items="${categories}" itemValue="id" itemLabel="name" />
                    </c:if>
                </form:select>
            </div>
        </div>
        <div>
            <a class="btn btn-default" href="<%=MVCConstants.Url.ADMIN + MVCConstants.Url.Admin.CATEGORIES%>">
                                cancel
                            </a>
            <button type="submit" class="btn btn-primary">
                save
            </button>
        </div>
    </form:form>

這是我的控制器:

@Controller
@RequestMapping("/admin")
public class CategoryController {
    ...
    @RequestMapping(value = MVCConstants.Url.Admin.CATEGORY_EDIT, method = RequestMethod.POST)
    public String updateCategory(Category category,
                                 BindingResult result,
                                 HttpServletRequest request,
                                 Model model) {

        String item = request.getParameter("name");
        byte[] bytes = item.getBytes(StandardCharsets.ISO_8859_1);
        item = new String(bytes, StandardCharsets.UTF_8);


        Logger.error("cat. Name: " + category.geName()); // ÐбÑ
        Logger.error("req. Name: " + request.getParameter("name")); // ÐбÑ
        Logger.error("item: " + item); // Correct value!
        Logger.error("request.getCharacterEncoding(): " + request.getCharacterEncoding()); //UTF-8
        try {
            request.setCharacterEncoding("UTF-8");
        } catch (UnsupportedEncodingException e) {
            Logger.error("can't change request encoding",e);
        }
        Logger.error("e. req. UTF-8. name: " + request.getParameter("name")); // ÐбÑ
        Logger.error("request.getCharacterEncoding(): " + request.getCharacterEncoding()); // UTF-8
        model.asMap().clear();
        categoryServiceImpl.save(category);
        return MVCConstants.Views.Admin.CATEGORIES;
    }
}

我有UTF-8過濾器:

public class ApplicationInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
...
@Override
    protected Filter[] getServletFilters() {
        CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
        characterEncodingFilter.setEncoding("UTF-8");
        return new Filter[] { characterEncodingFilter};
    }
}

我在server.xml設置URIEncoding="UTF-8"

<Connector port="8080" protocol="HTTP/1.1"
                 connectionTimeout="20000"
                 redirectPort="8443"
                 maxPostSize="20971520"
                 URIEncoding="UTF-8" />

連接器p80也是如此。

你能告訴我什么是錯的嗎?

必須在SecurityFilter之前啟動CharacterEncodingFilter。 我將其移至安全配置:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    @Qualifier("userDetailsService")
    UserDetailsService userDetailsService;

    @Autowired
    SuccessLoginHandler successLoginHandler;

    @Autowired
    public void configureGlobalSecurity(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userDetailsService);
        auth.authenticationProvider(authenticationProvider());
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        CharacterEncodingFilter encodingFilter = new CharacterEncodingFilter();
        encodingFilter.setEncoding("UTF-8");
        encodingFilter.setForceEncoding(true);

        http.addFilterBefore(encodingFilter,CsrfFilter.class);

        ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM