前后端分离后的手机端乱码问题

问题描述

前后端分离的项目,在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>

猜你喜欢

转载自my.oschina.net/u/3011256/blog/1617200