我已经开发了一个示例春天启动oauth2应用程序,其中包括授权和资源服务器。根据我的用例,我在从客户端应用程序调用oauth2服务器与确认访问并使用生成的授权代码重定向到客户端应用程序之间插入了自定义工作流程。 我已经成功插入了自定义业务逻辑,但是在此之后我无法恢复oauth2授权代码流程。 请帮助我恢复oauth代码流。 随附的是securityConfiguration的代码以及/ savepref调用的API,在这里我需要恢复oauth流。
/ *在这里,我覆盖了successForwardUrl,以在生成授权代码并将其重定向回客户端应用程序之前执行一些业务逻辑* /
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/").permitAll()
.antMatchers("/profile").hasAnyRole("ADMIN", "USER")
.and().formLogin()
.loginPage("/login")
.loginProcessingUrl("/login")
.usernameParameter("username")
.passwordParameter("password")
.successForwardUrl("/renderpin");
}
@Override
public void configure(AuthenticationManagerBuilder authenticationMgr) throws Exception {
authenticationMgr.parentAuthenticationManager(authenticationManager).userDetailsService(customUserDetailsService)
.passwordEncoder(passwordEncoder());
}
/ *以下是控制器类,在这里我需要恢复oauth流以生成授权代码,并使用生成的代码重定向回客户端应用程序* /
@RequestMapping(value = "/savepref", method = RequestMethod.POST)
public String savePreferences(@ModelAttribute(name = "ProfileResponse") ProfileResponse profileResponse,
@AuthenticationPrincipal UserDetails currentUser, Model model, HttpServletRequest request) {
Optional<Users> usersOptional = usersRepository.findByName(currentUser.getUsername());
int loggedInUserId = usersOptional.get().getId();
System.out.println("OAUTH2:PKS -> Saving prefs -> " + profileResponse.getUsername());
HttpSession session = request.getSession();
DefaultSavedRequest defaultSavedRequest = (DefaultSavedRequest) session.getAttribute("SPRING_SECURITY_SAVED_REQUEST");
return "redirect:/oauth/confirm_access";
}