问题描述
前后端分离的项目,在pc端调试代码都没有乱码问题,前端后端都设置了编码为utf-8,在上线之前还是很正常的编码,后来发现在手机上加载前端后,发送到后端,后端接收到的数据就乱码了
解决思路
发现用这种方式解码可以得到正确的内容
String content = new String(content.getBytes("iso8859-1"),"utf-8");
猜测
由于服务端系统是有java构建的,其中有shiro管理用户登陆授权内容,猜测是由于shiro预读了前端传输的数据,导致乱码
最终解决
添加过滤器
public class JFWebFilter implements Filter {
private Log log = Log.getLog(JFWebFilter.class);
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest)req;
HttpServletResponse response = (HttpServletResponse)res;
try {
request.setCharacterEncoding("utf-8");//解决shiro预读导致的乱码问题
}catch (Exception e){
log.info("JFWebFilter|doFilter|e="+Lang.getTrace(e));
}
在web.xml中添加过滤器,此过滤器一定要放在shiro过滤器之前
<filter>
<filter-name>jfweb</filter-name>
<filter-class>com.web.core.filter.JFWebFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>jfweb</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
<listener-class>org.apache.shiro.web.env.EnvironmentLoaderListener</listener-class>
</listener>
<filter>
<filter-name>shiro</filter-name>
<filter-class>org.apache.shiro.web.servlet.ShiroFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>shiro</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>