我使用spring security登录。现在我正在尝试添加spring social facebook登录,但是我收到了很多错误信息。
首先,当我尝试使用spring social guide之类的相同方法时,我无法@Autowired private Facebook facebook
我找到了解决方案
@Bean
@Scope(value = "request", proxyMode = ScopedProxyMode.INTERFACES)
public Facebook facebook(ConnectionRepository repository) {
Connection<Facebook> connection = repository
.findPrimaryConnection(Facebook.class);
return connection != null ? connection.getApi() : null;
}
接下来,我收到错误“找不到bean”。我必须补充一下:
@Bean
public ConnectionRepository connectionRepository() {
Authentication authentication = SecurityContextHolder.getContext()
.getAuthentication();
if (authentication == null) {
throw new IllegalStateException(
"Unable to get a ConnectionRepository: no user signed in");
}
return usersConnectionRepository().createConnectionRepository(
authentication.getName());
}
@Bean
public ConnectionFactoryLocator connectionFactoryLocator() {
ConnectionFactoryRegistry registry = new ConnectionFactoryRegistry();
registry.addConnectionFactory(new FacebookConnectionFactory(facebookid,
facebookSecure));
return registry;
}
@Bean
public AuthenticationNameUserIdSource authenticationNameUserIdSource(){
return new AuthenticationNameUserIdSource();
}
@Bean
public ConnectController connectController(
ConnectionFactoryLocator connectionFactoryLocator,
ConnectionRepository connectionRepository) {
return new ConnectController(connectionFactoryLocator,
connectionRepository);
}
@Bean
public UsersConnectionRepository usersConnectionRepository() {
return new JdbcUsersConnectionRepository(dataSource,
connectionFactoryLocator(), Encryptors.noOpText());
}
之后,我还有其他问题java.lang.NoSuchMethodError: org.springframework.social.security.SocialAuthenticationFilter.getFilterProcessesUrl()Ljava/lang/String;
@Bean
public SocialAuthenticationServiceLocator socialAuthenticationServiceLocator() {
SocialAuthenticationServiceRegistry registry = new SocialAuthenticationServiceRegistry();
registry.addConnectionFactory(new FacebookConnectionFactory(facebookid,
facebookSecure));
return registry;
}
@Bean
public SocialAuthenticationFilter socialAuthenticationFilter()
throws Exception {
SocialAuthenticationFilter filter = new SocialAuthenticationFilter(
authenticationManager(), authenticationNameUserIdSource(),
usersConnectionRepository(), socialAuthenticationServiceLocator());
filter.setFilterProcessesUrl("/login");
filter.setSignupUrl("/signup");
filter.setConnectionAddedRedirectUrl("/home");
filter.setPostLoginUrl("/home"); // always open account profile
// page after login
// filter.setRememberMeServices(rememberMeServices());
return filter;
}
但总是一样。
这是我的http配置
http.csrf()
.disable()
.authorizeRequests()
.antMatchers("/home", "/css/**", "/**/*.css*", "/", "/signup",
"/facebook", "/signup.xhtml").permitAll().anyRequest()
.authenticated().and().formLogin().loginPage("/login").loginProcessingUrl("/login/authenticate")
.defaultSuccessUrl("/home").failureUrl("/login")
.permitAll().and().logout().logoutUrl("/logout")
.invalidateHttpSession(true).logoutSuccessUrl("/").and()
.apply(new SpringSocialConfigurer());
和控制器
@RequestMapping(value = "/login", method = RequestMethod.GET)
public String loginPage() {
return "redirect:/login/authenticate/connect/facebook";
}
我做了一整个tutorial。接下来,我删除了SocialConfigurer
实施并创建了相同的内容(不是@Override
,只有@Bean
)social documentation。
'正常登录'(spring security)工作正常,但我无法使用spring security配置spring社交。我使用JSF
和.XHTML
个文件。
也许有人知道我在哪里犯错误?
感谢您的帮助。
答案 0 :(得分:1)
看起来Spring Security在Spring Security 4.0.0.RC1中删除了getFilterProcessesUrl()(它被标记为已弃用)。
似乎其他项目过滤器尚未更新?
尝试回滚到4.0.0.M2或使用3.2列车。
答案 1 :(得分:1)
请注意,春季安全4不接受春季社交1.1.0。请将所有spring社交依赖项(config,core,security和web)升级到1.1.2.RELEASE。你可以把你的春季社交Facebook留给1.1.0
答案 2 :(得分:0)
正如我的评论中暗示的那样,你有一些库的错误版本。我的猜测是 Spring Security 的版本是错误的。根据我的发现,您应该使用Spring的 3.2.x 系列(例如3.2.5)中的版本。
答案 3 :(得分:0)
考虑使用版本1.1.4。
这是在spring-social-security 1.1.4.RELEASE(或者之前的某个版本)中解决的。