在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/Java/ springboot的過(guò)濾器一次請(qǐng)求執(zhí)行了兩次,且在第一次獲取的某header為

springboot的過(guò)濾器一次請(qǐng)求執(zhí)行了兩次,且在第一次獲取的某header為空的情況下第二次過(guò)濾可以獲取header

1.如題,一次過(guò)來(lái)的請(qǐng)求在loginfilter里執(zhí)行了兩次,第一次獲取header為空,然后又進(jìn)入了一次loginfilter,卻可以獲得header的一個(gè)參數(shù)

2.filter類

public class LoginFilter implements Filter {

    @Autowired
    UserService userService;

    @Value("errorPage")
    String errorPage = "/auth/error.htm";

    //Logger logger = LoggerFactory.getLogger(this.getClass());

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        ServletContext servletContext = filterConfig.getServletContext();
        ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(servletContext);
        userService = (UserService)ctx.getBean("userService");
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
        throws IOException, ServletException {
        String path = ((HttpServletRequest)servletRequest).getServletPath();
        String tempUid = ((HttpServletRequest)servletRequest).getHeader("tempUid");
        //System.out.println(JSON.toJSONString(req.getHeaderNames()));
        //logger.info("path=" + path + " and tempUid = " + tempUid);
        if (path.indexOf("/auth/configValue") >= 0 ||
            path.indexOf("/user/code") >= 0) {
            // Filter 只是鏈?zhǔn)教幚恚?qǐng)求依然轉(zhuǎn)發(fā)到目的地址。
            filterChain.doFilter(servletRequest, servletResponse);
        } else if (StringUtils.hasLength(tempUid)){
            userService.checkAuth(tempUid);
            // Filter 只是鏈?zhǔn)教幚?,?qǐng)求依然轉(zhuǎn)發(fā)到目的地址。
            filterChain.doFilter(servletRequest, servletResponse);
        } else if (path.indexOf(errorPage) >= 0){
            // Filter 只是鏈?zhǔn)教幚?,?qǐng)求依然轉(zhuǎn)發(fā)到目的地址。
            filterChain.doFilter(servletRequest, servletResponse);
        } else {
            //logger.error("除獲取前端簽名和用戶信息,所有接口都必須帶tempUid!");
            //return;
            servletRequest.getRequestDispatcher(errorPage).forward(servletRequest, servletResponse);
        }
    }

    @Override
    public void destroy() {

    }
}

//filter配置
@Configuration
public class FilterConfig {

    @Bean
    public FilterRegistrationBean filterRegistration() {

        FilterRegistrationBean registration = new FilterRegistrationBean();
        registration.setFilter(new LoginFilter());
        registration.addUrlPatterns("/*");
        registration.setName("loginFilter");
        registration.setOrder(1);
        return registration;
    }

}

3.請(qǐng)求進(jìn)來(lái)的時(shí)候第一次獲取tempUid為null,第二次有值

回答
編輯回答
涼汐

前端是瀏覽器嗎?瀏覽器一個(gè)請(qǐng)求會(huì)發(fā)送多次

2017年1月29日 03:53
編輯回答
使勁操

后臺(tái)必然debug了,這是一個(gè)移動(dòng)端h5項(xiàng)目,調(diào)用也不在我這里,而且前端明確表示他只發(fā)了一次請(qǐng)求。目前看來(lái)好像filter被加載了兩次,但是最奇怪的是header里的屬性兩次卻不一樣

2017年6月30日 08:42
編輯回答
葬憶

和瀏覽器沒(méi)關(guān)系的,也urlPatterns也沒(méi)關(guān)系。。。我也沒(méi)解決,還在坑中--SpringBoot2.0

    FilterRegistrationBean registrationBean = new FilterRegistrationBean();
    registrationBean.setFilter(new DelegatingFilterProxy("sysVisitFilter"));
    registrationBean.addInitParameter("targetFilterLifecycle","true");
    registrationBean.addUrlPatterns("/*");
    registrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico");
    registrationBean.setDispatcherTypes(DispatcherType.REQUEST);
    return registrationBean;
2017年11月10日 04:57
編輯回答
離觴

開發(fā)者工具+debug看一下是怎么回事?

2018年6月13日 10:48
編輯回答
菊外人

是post請(qǐng)求?get會(huì)出現(xiàn)此問(wèn)題嗎?

注意post會(huì)發(fā)送倆次tcp連接(瀏覽器先發(fā)送header,服務(wù)器響應(yīng)100,再發(fā)送data,服務(wù)器響應(yīng)200)

registration.addUrlPatterns("/login/*"); // 改成這個(gè)呢?

2018年7月16日 18:29