[英]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.