У меня есть приложение Spring MVC, которое использует Spring Social Facebook для включения входа в Facebook. Это нормально работает на моей локальной машине, но в настоящее время она не работает в моей промежуточной среде. Моя проблема в том, что я не могу понять, что пошло не так. Когда я пытаюсь войти в систему, я перенаправляюсь в Facebook для авторизации приложения. Эта часть работает нормально. Но когда я разрешаю приложение, все, что происходит, это то, что я перенаправлен обратно на http://example.com/signin?error=provider#_=_
, что дает ошибку 404 Not Found
.Включение ведения журнала для Spring Social
Это не страшно полезно для отладки источника ошибки и просмотра моих файлов журнала 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 Социальных журналов в моей консоли. Ведение журнала работает отлично, если я пишу ему в своем приложении, как показано ниже, поэтому регистрация должна работать нормально.
@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 так, как я делаю (например, one used for Spring Social tests), но в остальном ничего. Я полагаю, что библиотека поддерживает это, потому что в противном случае я не знаю, как отлаживать ошибки. Или есть другой способ, который я могу узнать, что вызывает ошибку?
Ниже приведена моя социальная конфигурация, хотя я не думаю, что это важно в этом случае.
@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;
}
}
спасибо, что заранее.