我有一个Spring MVC应用程序,使用Spring Social Facebook实现Facebook登录。在我的本地机器上运行良好,但目前在我的暂存环境中无法正常工作。我的问题是我无法弄清楚出了什么问题。当我尝试登录时,我被重定向到Facebook以授权该应用程序。这部分运作良好。但是,当我授权该应用程序时,发生的一切就是我被重定向回
这对于调试错误的来源并不十分有用,并且查看我的Tomcat日志文件时,我找不到任何可以帮助我找到错误的信息。没有堆栈跟踪、错误消息或类似的信息。我已经在项目中启用了log4j,但我没有看到来自Spring Social的任何日志记录。实际上,我不确定如何配置Spring Social的日志记录,但我在我的log4j2.xml文件中尝试了以下内容:
然而,我在控制台中看不到任何Spring Social日志。如果我像以下这样在我的应用程序中写入日志,日志记录就可以正常工作,所以日志记录应该没问题。
我该如何配置Spring Social的日志记录?我找到了一些配置log4j的示例(例如用于Spring Social测试的一个示例),但除此之外没有其他内容。我认为该库支持此功能,否则我不知道如何调试错误。还有其他方法可以找出触发错误的原因吗?
以下是我的Spring Social配置,尽管我认为在这种情况下它并不重要。
http://example.com/signin?error=provider#_=_
,这会导致404 Not Found
错误。这对于调试错误的来源并不十分有用,并且查看我的Tomcat日志文件时,我找不到任何可以帮助我找到错误的信息。没有堆栈跟踪、错误消息或类似的信息。我已经在项目中启用了log4j,但我没有看到来自Spring Social的任何日志记录。实际上,我不确定如何配置Spring Social的日志记录,但我在我的log4j2.xml文件中尝试了以下内容:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="DEBUG">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
</Appenders>
<Loggers>
<Logger name="com.example" level="trace">
<AppenderRef ref="Console" />
</Logger>
<Logger name="org.springframework.social" level="all">
<AppenderRef ref="Console" />
</Logger>
<Logger name="org.springframework.social.facebook" level="all">
<AppenderRef ref="Console" />
</Logger>
<Logger name="org.springframework.social.security" level="all">
<AppenderRef ref="Console" />
</Logger>
<Root level="error">
<AppenderRef ref="Console" />
</Root>
</Loggers>
</Configuration>
然而,我在控制台中看不到任何Spring Social日志。如果我像以下这样在我的应用程序中写入日志,日志记录就可以正常工作,所以日志记录应该没问题。
@Controller
public class IndexController {
private static Logger logger = LogManager.getLogger(IndexController.class);
@RequestMapping("/")
public String home() {
logger.debug("Hello there from logger!");
return "home";
}
}
我该如何配置Spring Social的日志记录?我找到了一些配置log4j的示例(例如用于Spring Social测试的一个示例),但除此之外没有其他内容。我认为该库支持此功能,否则我不知道如何调试错误。还有其他方法可以找出触发错误的原因吗?
以下是我的Spring Social配置,尽管我认为在这种情况下它并不重要。
@Configuration
public class SocialConfig {
@Autowired
private DataSource dataSource;
@Autowired
private TextEncryptor textEncryptor;
@Autowired
private AccountService accountService;
@Autowired
private AccountRepository accountRepository;
@Value("${facebook.app.id}")
private String facebookAppId;
@Value("${facebook.app.secret}")
private String facebookAppSecret;
@Bean
public ProviderSignInController providerSignInController() {
ProviderSignInController controller = new ProviderSignInController(this.connectionFactoryLocator(), this.usersConnectionRepository(), new SpringSecuritySignInAdapter(this.accountRepository));
controller.addSignInInterceptor(new RedirectToPreviousPageInterceptor(controller));
return controller;
}
@Bean
public ConnectionFactoryRegistry connectionFactoryLocator() {
ConnectionFactoryRegistry connectionFactoryRegistry = new ConnectionFactoryRegistry();
List<ConnectionFactory<?>> connectionFactories = new ArrayList<ConnectionFactory<?>>();
connectionFactories.add(this.facebookConnectionFactory());
connectionFactoryRegistry.setConnectionFactories(connectionFactories);
return connectionFactoryRegistry;
}
@Bean
public FacebookConnectionFactory facebookConnectionFactory() {
FacebookConnectionFactory connectionFactory = new FacebookConnectionFactory(this.facebookAppId, this.facebookAppSecret);
connectionFactory.setScope("email");
return connectionFactory;
}
@Bean
public JdbcUsersConnectionRepository usersConnectionRepository() {
JdbcUsersConnectionRepository repository = new JdbcUsersConnectionRepository(this.dataSource, this.connectionFactoryLocator(), this.textEncryptor);
repository.setConnectionSignUp(this.accountService);
return repository;
}
}
非常感谢您的预先协助。