我正在尝试以SpringMVC+security+OAuth2的身份登录。
成功接收到当前的身份验证状态,并且可以获得用户信息。
我想获取用户信息,所以我编写了userInfoEndpoint
,但根本没有调用userInfoEndPoint
。
另一方面,CCD_ 3被成功地调用并且认证具有用户信息。
所以我有两个问题
首先,为什么根本没有调用userInfoEndpoint
?在Spring Boot的情况下,它成功地调用了
第二,如何从successHandler
的认证中获取用户信息?successHandler
的身份验证只有这种方法。
Object getCredentials();
Object getDetails();
Object getPrincipal();
boolean isAuthenticated();
void setAuthenticated(boolean var1) throws IllegalArgumentException;
—源代码—
SecurityConfig.java
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
.authorizeRequests()
.antMatchers("/*").permitAll()
.and()
.logout()
.logoutUrl("/logout")
.logoutSuccessUrl("/")
.and()
.oauth2Login()
.userInfoEndpoint()
.userService(customOAuth2UserService)
.and()
.successHandler(new SuccessHandler());
}
SuccessHandler.java
@Log4j
public class SuccessHandler implements AuthenticationSuccessHandler {
@Override
public void onAuthenticationSuccess(HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse,
Authentication authentication) throws IOException, ServletException {
log.info(authentication);
}
}
你能尝试在SecurityConfig.java中这样更改序列吗:
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
.oauth2Login()
.userInfoEndpoint()
.userService(customOAuth2UserService)
.and()
.authorizeRequests()
.antMatchers("/*").permitAll()
.and()
.logout()
.logoutUrl("/logout")
.logoutSuccessUrl("/")
.and()
.successHandler(new SuccessHandler());
}
因为下面的代码允许所有URL,因此oauth2Login((代码永远无法访问。
.authorizeRequests()
.antMatchers("/*").permitAll()
我在使用Spring 3.1.0时遇到了同样的问题,它不起作用,我的CustomOAuth2Service根本没有被调用