zhouyanan123 2019-11-14 10:28 采纳率: 0%
浏览 2575

Application startup failed

2019-11-14 10:13:09,698 ERROR   9667 --- [           main] o.springframework.boot.SpringApplication : Application startup failed
org.springframework.beans.factory.BeanDefinitionStoreException: Failed to process import candidates for configuration class [com.dtdream.eta.web.EGGovUaaWebDubboApplication]; nested exception is org.springframework.context.annotation.ConflictingBeanDefinitionException: Annotation-specified bean name 'shiroAutoConfiguration' for bean class [com.dtdream.eta.web.auth.autoconfigure.ShiroAutoConfiguration] conflicts with existing, non-compatible bean definition of same name and class [com.dtdream.eta.web.uaa.autoconfigure.ShiroAutoConfiguration]
    at org.springframework.context.annotation.ConfigurationClassParser.processImports(ConfigurationClassParser.java:546)
    at org.springframework.context.annotation.ConfigurationClassParser.processDeferredImportSelectors(ConfigurationClassParser.java:482)
    at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:191)
    at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:321)
    at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:243)
    at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:273)
    at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:98)
    at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:681)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:523)
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122)
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:759)
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:369)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:313)
    at com.dtdream.eta.web.EGGovUaaWebDubboApplication.main(EGGovUaaWebDubboApplication.java:57)
Caused by: org.springframework.context.annotation.ConflictingBeanDefinitionException: Annotation-specified bean name 'shiroAutoConfiguration' for bean class [com.dtdream.eta.web.auth.autoconfigure.ShiroAutoConfiguration] conflicts with existing, non-compatible bean definition of same name and class [com.dtdream.eta.web.uaa.autoconfigure.ShiroAutoConfiguration]
    at org.springframework.context.annotation.ClassPathBeanDefinitionScanner.checkCandidate(ClassPathBeanDefinitionScanner.java:320)
    at org.springframework.context.annotation.ClassPathBeanDefinitionScanner.doScan(ClassPathBeanDefinitionScanner.java:259)
    at org.springframework.context.annotation.ComponentScanAnnotationParser.parse(ComponentScanAnnotationParser.java:144)
    at org.springframework.context.annotation.ConfigurationClassParser.doProcessConfigurationClass(ConfigurationClassParser.java:275)
    at org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:237)
    at org.springframework.context.annotation.ConfigurationClassParser.processImports(ConfigurationClassParser.java:537)
    ... 13 common frames omitted
Disconnected from the target VM, address: '127.0.0.1:55237', transport: 'socket'

Process finished with exit code 1

附上两个配置文件配置:com.dtdream.eta.web.auth.autoconfigure.ShiroAutoConfiguration

package com.dtdream.eta.web.auth.autoconfigure;

import com.dtdream.eta.web.auth.cache.JedisCacheManager;
import com.dtdream.eta.web.auth.mobile.AppDefaultWebSessionManager;
import com.dtdream.eta.web.auth.mobile.AppSessionIdGenerator;
import com.dtdream.eta.web.auth.mobile.AppTokenRealm;
import com.dtdream.eta.web.auth.mobile.MobileAuthFilter;
import com.dtdream.eta.web.auth.shiro.*;
import com.dtdream.eta.web.auth.oauth2.OAuth2AuthenticationFilter;
import com.dtdream.eta.web.auth.oauth2.OAuth2Realm;
import com.dtdream.gamma.account.service.AccountPrivilegeReadService;
import com.dtdream.gamma.organization.service.EmployeeReadService;
import com.dtdream.gamma.uaa.service.OauthAccessTokenReadService;
import com.google.common.base.Strings;
import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.cache.CacheManager;
import org.apache.shiro.codec.Base64;
import org.apache.shiro.mgt.RememberMeManager;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.realm.Realm;
import org.apache.shiro.session.mgt.SessionManager;
import org.apache.shiro.session.mgt.eis.EnterpriseCacheSessionDAO;
import org.apache.shiro.session.mgt.eis.SessionDAO;
import org.apache.shiro.session.mgt.eis.SessionIdGenerator;
import org.apache.shiro.session.mgt.quartz.QuartzSessionValidationScheduler;
import org.apache.shiro.spring.LifecycleBeanPostProcessor;
import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
import org.apache.shiro.web.filter.authc.AuthenticationFilter;
import org.apache.shiro.web.mgt.CookieRememberMeManager;
import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
import org.apache.shiro.web.servlet.AbstractShiroFilter;
import org.apache.shiro.web.servlet.Cookie;
import org.apache.shiro.web.servlet.ShiroHttpSession;
import org.apache.shiro.web.servlet.SimpleCookie;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.data.redis.core.RedisTemplate;

import javax.servlet.Filter;
import java.net.URL;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**

  • */
    @Configuration
    @Slf4j
    @Order(Ordered.LOWEST_PRECEDENCE)
    public class ShiroAutoConfiguration {

    @Bean
    @Autowired
    public CacheManager shiroCacheManager(EtaAuthProperties properties, RedisTemplate redisTemplate){
    return new JedisCacheManager(redisTemplate);
    }

    @Bean
    @Autowired
    public AuthorizingRealm oAuth2Realm(EtaAuthProperties properties,
    EmployeeReadService employeeReadService,
    AccountPrivilegeReadService accountPrivilegeReadService,
    CacheManager cacheManager){
    OAuth2Realm oAuth2Realm = new OAuth2Realm(cacheManager.getCache(JedisCacheManager.loginUserName));
    oAuth2Realm.setCachingEnabled(true);
    oAuth2Realm.setAuthenticationCachingEnabled(true);
    oAuth2Realm.setAuthenticationCacheName(JedisCacheManager.authenticationName);
    oAuth2Realm.setAuthorizationCachingEnabled(true);
    oAuth2Realm.setAuthorizationCacheName(JedisCacheManager.authorizationName);
    oAuth2Realm.setProperties(properties);
    oAuth2Realm.setEmployeeReadService(employeeReadService);
    oAuth2Realm.setAccountPrivilegeReadService(accountPrivilegeReadService);
    return oAuth2Realm;
    }

    @Bean
    @Autowired
    public AppTokenRealm appTokenRealm(EtaAuthProperties properties,
    OauthAccessTokenReadService oauthAccessTokenReadService,
    EmployeeReadService employeeReadService,
    AccountPrivilegeReadService accountPrivilegeReadService,
    CacheManager cacheManager){
    AppTokenRealm appTokenRealm = new AppTokenRealm(cacheManager.getCache(JedisCacheManager.loginUserName));
    appTokenRealm.setCachingEnabled(true);
    appTokenRealm.setAuthenticationCachingEnabled(true);
    appTokenRealm.setAuthenticationCacheName(JedisCacheManager.authenticationName);
    appTokenRealm.setAuthorizationCachingEnabled(true);
    appTokenRealm.setAuthorizationCacheName(JedisCacheManager.authorizationName);
    appTokenRealm.setProperties(properties);
    appTokenRealm.setEmployeeReadService(employeeReadService);
    appTokenRealm.setAccountPrivilegeReadService(accountPrivilegeReadService);
    appTokenRealm.setOauthAccessTokenReadService(oauthAccessTokenReadService);

    return appTokenRealm;
    

    }

// @Bean
// @Autowired
// public AppTokenRealm appTokenRealm(){
// AppTokenRealm appTokenRealm = new AppTokenRealm();
// return appTokenRealm;
// }

@Bean
public SessionIdGenerator sessionIdGenerator(){
    return new AppSessionIdGenerator();
}

@Bean
@Autowired
public Cookie sessionIdCookie(EtaAuthProperties properties){
    SimpleCookie template = properties.getCookie();
    SimpleCookie cookie;
    if (null == template){
        cookie = new SimpleCookie();
        cookie.setPath("/");
        cookie.setName(ShiroHttpSession.DEFAULT_SESSION_ID_NAME);
        return cookie;
    }
    cookie = new SimpleCookie(template);
    if (null == cookie.getPath())
        cookie.setPath("/");
    if (Strings.isNullOrEmpty(cookie.getName()))
        cookie.setName(ShiroHttpSession.DEFAULT_SESSION_ID_NAME);

    return cookie;
}

@Bean
public Cookie rememberMeCookie(){
    SimpleCookie cookie = new SimpleCookie("rememberMe");
    cookie.setHttpOnly(true);
    cookie.setMaxAge(2592000);

    return cookie;
}

@Bean
@Autowired
@Qualifier("rememberMeCookie")
public CookieRememberMeManager rememberMeManager(SimpleCookie rememberMeCookie) throws BeansException {
    CookieRememberMeManager rememberMeManager = new CookieRememberMeManager();
    rememberMeManager.setCipherKey(Base64.decode("4AvVhmFLUs0KTA3Kprsdag=="));
    rememberMeManager.setCookie(rememberMeCookie);

    return rememberMeManager;
}

@Bean
@Autowired

public SessionDAO sessionDAO(@Qualifier("sessionIdGenerator") SessionIdGenerator sessionIdGenerator,
                             CacheManager cacheManager){
    EnterpriseCacheSessionDAO sessionDAO = new EnterpriseCacheSessionDAO();
    sessionDAO.setActiveSessionsCacheName(JedisCacheManager.sessionName);
    sessionDAO.setSessionIdGenerator(sessionIdGenerator);
    sessionDAO.setCacheManager(cacheManager);
    return sessionDAO;
}

@Bean
public QuartzSessionValidationScheduler sessionValidationScheduler(){
    QuartzSessionValidationScheduler scheduler = new QuartzSessionValidationScheduler();
    scheduler.setSessionValidationInterval(10000);
    //scheduler.setSessionManager((ValidatingSessionManager)applicationContext.getBean("sessionManager"));
    return scheduler;
}
@Bean
@Autowired
public SessionManager sessionManager(QuartzSessionValidationScheduler scheduler,
                                     SessionDAO sessionDAO,
                                     @Qualifier("sessionIdCookie") Cookie sessionIdCookie){
    AppDefaultWebSessionManager sessionManager = new AppDefaultWebSessionManager();
    sessionManager.setGlobalSessionTimeout(7200000);
    sessionManager.setDeleteInvalidSessions(true);
    sessionManager.setSessionValidationSchedulerEnabled(false); //关闭session检查,否则会乱扫描redis
    //sessionManager.setSessionValidationScheduler(scheduler);
    scheduler.setSessionManager(sessionManager);
    sessionManager.setSessionDAO(sessionDAO);
    sessionManager.setSessionIdCookieEnabled(true);
    sessionManager.setSessionIdCookie(sessionIdCookie);
    return sessionManager;
}

@Bean
@Autowired
public SecurityManager securityManager(List<Realm> realms,
                                       SessionManager sessionManager,
                                       CacheManager cacheManager,
                                       RememberMeManager rememberMeManager){
    DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
    securityManager.setRealms(realms);
    securityManager.setSessionManager(sessionManager);
    securityManager.setCacheManager(cacheManager);
    //securityManager.setRememberMeManager(rememberMeManager);
    SecurityUtils.setSecurityManager(securityManager);
    return securityManager;
}

@Bean
@Autowired
public AuthenticationFilter oAuth2AuthenticationFilter(EtaAuthProperties properties){
    OAuth2AuthenticationFilter oAuth2AuthenticationFilter = new OAuth2AuthenticationFilter();
    oAuth2AuthenticationFilter.setAuthcCodeParam("code");
    oAuth2AuthenticationFilter.setFailureUrl("/error");
    oAuth2AuthenticationFilter.setProperties(properties);
    return oAuth2AuthenticationFilter;
}

@Bean
@Autowired
public Filter shiroFilter(SecurityManager securityManager,
                          @Qualifier("oAuth2AuthenticationFilter") AuthenticationFilter oath2Filter,
                          EtaAuthProperties properties,
                          EtaAuthFilter authFilter,
                          MobileAuthFilter mobileAuthFilter,
                          CurrentUserEnvFilter userEnvFilter,
                          EtaEgFilter etaEgFilter) throws Exception{
    ShiroFilterFactoryBean filterFactoryBean = new ShiroFilterFactoryBean();
    filterFactoryBean.setSecurityManager(securityManager);
    filterFactoryBean.setLoginUrl(null);
    filterFactoryBean.setSuccessUrl("/");
    Map<String, Filter> filters = new HashMap<>();
    filters.put("oauth2Authc", oath2Filter);
    filters.put("mobileAuthFilter",mobileAuthFilter);
    filters.put("userEnv", userEnvFilter);
    filters.put("etaEgFilter", etaEgFilter);
    filters.put("perm", authFilter);

    filterFactoryBean.setFilters(filters);
    Map<String, String> map = new HashMap<>();
    String ssoPath;
    try {
        URL url = new URL(properties.getOauth2().sso.loginPath);
        ssoPath = url.getPath();
    }catch (Exception e){
        ssoPath = properties.getOauth2().sso.loginPath;
    }
    if (properties.off){
        map.put("/**", "anon, userEnv");
    }else{
        map.put("/", "anon"); //这个地方有问题,先放着,放在这里能发现更多问题
        map.put("/error", "anon");
        map.put(ssoPath, "oauth2Authc");
        /*map.put("/logout", "logout"); lout使用自己controller*/
        /*为政务提供的需要签名认证的api*/
        map.put("/openApi/**", "etaEgFilter");
        map.put("/**", "mobileAuthFilter, perm, userEnv");
        filterFactoryBean.setFilterChainDefinitionMap(map);
    }

    return new EtaWebAuthShiroFilterWrapper((AbstractShiroFilter) filterFactoryBean.getObject());
}

@Bean
public LifecycleBeanPostProcessor lifecycleBeanPostProcessor(){
    return new LifecycleBeanPostProcessor();
}

}



另一个:com.dtdream.eta.web.uaa.autoconfigure.ShiroAutoConfiguration


package com.dtdream.eta.web.uaa.autoconfigure;

import com.dtdream.eta.web.common.ca.realm.CABindingRealm;
import com.dtdream.eta.web.common.ca.realm.CARealm;
import com.dtdream.eta.web.common.shiro.ShiroFilterWrapper;
import com.dtdream.eta.web.uaa.cache.JedisCacheManager;
import com.dtdream.eta.web.uaa.filter.LoginFilter;
import com.dtdream.eta.web.uaa.realm.*;
import com.dtdream.eta.web.uaa.session.UaaWebSessionManager;
import com.google.common.base.Strings;
import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.cache.CacheManager;
import org.apache.shiro.codec.Base64;
import org.apache.shiro.mgt.RememberMeManager;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.realm.Realm;
import org.apache.shiro.session.mgt.SessionManager;
import org.apache.shiro.session.mgt.eis.EnterpriseCacheSessionDAO;
import org.apache.shiro.session.mgt.eis.JavaUuidSessionIdGenerator;
import org.apache.shiro.session.mgt.eis.SessionDAO;
import org.apache.shiro.session.mgt.eis.SessionIdGenerator;
import org.apache.shiro.session.mgt.quartz.QuartzSessionValidationScheduler;
import org.apache.shiro.spring.LifecycleBeanPostProcessor;
import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
import org.apache.shiro.web.mgt.CookieRememberMeManager;
import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
import org.apache.shiro.web.servlet.AbstractShiroFilter;
import org.apache.shiro.web.servlet.Cookie;
import org.apache.shiro.web.servlet.ShiroHttpSession;
import org.apache.shiro.web.servlet.SimpleCookie;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.core.RedisTemplate;

import javax.servlet.Filter;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**

  • */

@Configuration
@Slf4j
public class ShiroAutoConfiguration {

@Bean
@Autowired
public CacheManager cacheManager(EtaUaaProperties properties, RedisTemplate redisTemplate){
    return new JedisCacheManager(redisTemplate);
}

@Bean
@Autowired
public ShiroRealm shiroRealm(){
    ShiroRealm shiroRealm = new ShiroRealm();
    return shiroRealm;
}

@Bean
@Autowired
public ThirdPartyRealm ThirdPartyRealm(){
    ThirdPartyRealm thirdPartyRealm = new ThirdPartyRealm();
    return thirdPartyRealm;
}

@Bean
@Autowired
public SmsRealm smsRealm() {
    SmsRealm smsRealm = new SmsRealm();
    return smsRealm;
}

@Bean
@Autowired
public CARealm caRealm(){
    CARealm caRealm = new CARealm();
    return caRealm;
}

@Bean
@Autowired
public CABindingRealm caBindingRealm(){
    CABindingRealm caBindingRealm = new CABindingRealm();
    return caBindingRealm;
}

@Bean
public SessionIdGenerator sessionIdGenerator(){
    return new JavaUuidSessionIdGenerator();
}

@Bean
@Autowired
public Cookie sessionIdCookie(EtaUaaProperties properties){
    SimpleCookie template = properties.getCookie();
    SimpleCookie cookie;
    if (null == template){
        cookie = new SimpleCookie();
        cookie.setPath("/");
        cookie.setName(ShiroHttpSession.DEFAULT_SESSION_ID_NAME);
        return cookie;
    }
    cookie = new SimpleCookie(template);
    if (null == cookie.getPath())
        cookie.setPath("/");
    if (Strings.isNullOrEmpty(cookie.getName()))
        cookie.setName(ShiroHttpSession.DEFAULT_SESSION_ID_NAME);
    return cookie;
}

@Bean
public Cookie rememberMeCookie(){
    SimpleCookie cookie = new SimpleCookie("rememberMe");
    cookie.setHttpOnly(true);
    cookie.setMaxAge(2592000);

    return cookie;
}

@Bean
@Autowired
@Qualifier("rememberMeCookie")
public CookieRememberMeManager rememberMeManager(SimpleCookie rememberMeCookie) throws BeansException {
    CookieRememberMeManager rememberMeManager = new CookieRememberMeManager();
    rememberMeManager.setCipherKey(Base64.decode("4AvVhmFLUs0KTA3Kprsdag=="));
    rememberMeManager.setCookie(rememberMeCookie);

    return rememberMeManager;
}

@Bean
@Autowired
public SessionDAO sessionDAO(@Qualifier("sessionIdGenerator") SessionIdGenerator sessionIdGenerator,
                             CacheManager cacheManager){
    EnterpriseCacheSessionDAO sessionDAO = new EnterpriseCacheSessionDAO();
    sessionDAO.setActiveSessionsCacheName(JedisCacheManager.sessionName);
    sessionDAO.setSessionIdGenerator(sessionIdGenerator);
    sessionDAO.setCacheManager(cacheManager);
    return sessionDAO;
}

@Bean
public QuartzSessionValidationScheduler sessionValidationScheduler(){
    QuartzSessionValidationScheduler scheduler = new QuartzSessionValidationScheduler();
    scheduler.setSessionValidationInterval(7200000);
    //scheduler.setSessionManager((ValidatingSessionManager)applicationContext.getBean("sessionManager"));
    return scheduler;
}
@Bean
@Autowired
public SessionManager sessionManager(QuartzSessionValidationScheduler scheduler,
                                     SessionDAO sessionDAO,
                                     @Qualifier("sessionIdCookie") Cookie sessionIdCookie){
    UaaWebSessionManager sessionManager = new UaaWebSessionManager();
    sessionManager.setGlobalSessionTimeout(7200000);
    sessionManager.setDeleteInvalidSessions(true);
    sessionManager.setSessionValidationSchedulerEnabled(false);
    /*sessionManager.setSessionValidationScheduler(scheduler);*/
    scheduler.setSessionManager(sessionManager);
    sessionManager.setSessionDAO(sessionDAO);
    sessionManager.setSessionIdCookieEnabled(true);
    sessionManager.setSessionIdCookie(sessionIdCookie);

    return sessionManager;
}

@Bean
@Autowired
public SecurityManager securityManager(List<Realm> realms,
                                       SessionManager sessionManager,
                                       CacheManager cacheManager,
                                       RememberMeManager rememberMeManager){
    DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
    securityManager.setRealms(realms);
    securityManager.setSessionManager(sessionManager);
    securityManager.setCacheManager(cacheManager);
    //securityManager.setRememberMeManager(rememberMeManager);
    SecurityUtils.setSecurityManager(securityManager);

    return securityManager;
}

@Bean
@Autowired
public Filter shiroFilter(SecurityManager securityManager,
                          EtaUaaProperties properties,
                          LoginFilter loginFilter) throws Exception {
    ShiroFilterFactoryBean filterFactoryBean = new ShiroFilterFactoryBean();
    filterFactoryBean.setSecurityManager(securityManager);
    filterFactoryBean.setLoginUrl(null);
    filterFactoryBean.setSuccessUrl("/");
    Map<String, Filter> filters = new HashMap<>();
    filters.put("loginFilter", loginFilter);
    filterFactoryBean.setFilters(filters);
    Map<String, String> map = new HashMap<>();
    if (properties.off) {
        map.put("/**", "anon");
    } else {
        map.put("/login", "loginFilter");
        map.put("/iframe/login", "loginFilter");
        map.put("/**", "anon");
    }
    filterFactoryBean.setFilterChainDefinitionMap(map);
    return new ShiroFilterWrapper((AbstractShiroFilter) filterFactoryBean.getObject());
}

@Bean
public LifecycleBeanPostProcessor lifecycleBeanPostProcessor(){
    return new LifecycleBeanPostProcessor();
}

}

  • 写回答

2条回答

  • 毕小宝 博客专家认证 2019-11-14 13:47
    关注

    建议理论 Shiro 的配置过程,异常说明是这个框架用的时候出现问题了。

    评论

报告相同问题?

悬赏问题

  • ¥15 jupyterthemes 设置完毕后没有效果
  • ¥15 matlab图像高斯低通滤波
  • ¥15 针对曲面部件的制孔路径规划,大家有什么思路吗
  • ¥15 钢筋实图交点识别,机器视觉代码
  • ¥15 如何在Linux系统中,但是在window系统上idea里面可以正常运行?(相关搜索:jar包)
  • ¥50 400g qsfp 光模块iphy方案
  • ¥15 两块ADC0804用proteus仿真时,出现异常
  • ¥15 关于风控系统,如何去选择
  • ¥15 这款软件是什么?需要能满足我的需求
  • ¥15 SpringSecurityOauth2登陆前后request不一致