Advertisement
Guest User

Untitled

a guest
Mar 11th, 2020
232
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.19 KB | None | 0 0
  1. @Configuration
  2. @EnableWebSecurity
  3. @EnableOAuth2Client
  4. public class SecurityConfig extends WebSecurityConfigurerAdapter
  5. {
  6.  
  7. @Autowired
  8. private UserDao userDao;
  9.  
  10. @Autowired
  11. private PasswordEncoder passwordEncoder;
  12.  
  13. @Autowired
  14. private AuthProvider authProvider;
  15.  
  16. @Autowired
  17. @Qualifier("oauth2ClientContext")
  18. private OAuth2ClientContext oAuth2ClientContext;
  19.  
  20. @Bean
  21. PasswordEncoder passwordEncoder()
  22. {
  23. return new BCryptPasswordEncoder();
  24. }
  25.  
  26. @Override
  27. protected void configure(AuthenticationManagerBuilder auth)
  28. {
  29. auth.authenticationProvider(authProvider);
  30. }
  31.  
  32. @Override
  33. protected void configure(HttpSecurity http) throws Exception
  34. {
  35. http.addFilterBefore(ssoFilter(), UsernamePasswordAuthenticationFilter.class);
  36.  
  37. http
  38. .csrf().disable()
  39. .authorizeRequests()
  40. .antMatchers("/resources/**", "/", "/login**", "/registration", "main").permitAll()
  41. .anyRequest().authenticated()
  42. .and().formLogin().loginPage("/login")
  43. .defaultSuccessUrl("/main").failureUrl("/login?error").permitAll()
  44. .and().logout().logoutSuccessUrl("/").permitAll();
  45. }
  46.  
  47. @Bean
  48. public FilterRegistrationBean oAuth2ClientFilterRegistration(OAuth2ClientContextFilter oAuth2ClientContextFilter)
  49. {
  50. FilterRegistrationBean registration = new FilterRegistrationBean();
  51. registration.setFilter(oAuth2ClientContextFilter);
  52. registration.setOrder(-100);
  53. return registration;
  54. }
  55.  
  56. private Filter ssoFilter()
  57. {
  58. CompositeFilter filter = new CompositeFilter();
  59. List<Filter> filters = new ArrayList<>();
  60. filters.add(ssoFilter(google(), "/login/google"));
  61. filters.add(ssoFilter(discord(), "/login/discord"));
  62. filters.add(ssoFilter(vk(), "/login/vk"));
  63. filter.setFilters(filters);
  64. return filter;
  65. }
  66.  
  67. private Filter ssoFilter(ClientResources client, String path) {
  68. OAuth2ClientAuthenticationProcessingFilter filter = new OAuth2ClientAuthenticationProcessingFilter(path);
  69. OAuth2RestTemplate template = new OAuth2RestTemplate(client.getClient(), oAuth2ClientContext);
  70.  
  71. OAuth2AccessTokenSupport authAccessProvider = new AuthorizationCodeAccessTokenProvider();
  72.  
  73. AccessTokenProvider accessTokenProvider = new AccessTokenProviderChain(
  74. Arrays.<AccessTokenProvider> asList((AuthorizationCodeAccessTokenProvider)authAccessProvider)
  75. );
  76. template.setAccessTokenProvider(accessTokenProvider);
  77.  
  78. ClientHttpRequestFactory requestFactory = new DiscordHttpRequestFactory();
  79. authAccessProvider.setRequestFactory(requestFactory);
  80. template.setRequestFactory(requestFactory);
  81.  
  82. filter.setRestTemplate(template);
  83. CustomUserInfoTokenServices tokenServices = new CustomUserInfoTokenServices(
  84. client.getResource().getUserInfoUri(), client.getClient().getClientId());
  85. tokenServices.setRestTemplate(template);
  86.  
  87. tokenServices.setUserDao(userDao);
  88. tokenServices.setPasswordEncoder(passwordEncoder);
  89.  
  90. filter.setTokenServices(tokenServices);
  91. return filter;
  92. }
  93.  
  94. class ClientResources {
  95.  
  96. @NestedConfigurationProperty
  97. private AuthorizationCodeResourceDetails client = new AuthorizationCodeResourceDetails();
  98.  
  99. @NestedConfigurationProperty
  100. private ResourceServerProperties resource = new ResourceServerProperties();
  101.  
  102. public AuthorizationCodeResourceDetails getClient() {
  103. return client;
  104. }
  105.  
  106. public ResourceServerProperties getResource() {
  107. return resource;
  108. }
  109. }
  110.  
  111. @Bean
  112. @ConfigurationProperties("google")
  113. public ClientResources google()
  114. {
  115. return new ClientResources();
  116. }
  117.  
  118. @Bean
  119. @ConfigurationProperties("discord")
  120. public ClientResources discord()
  121. {
  122. return new ClientResources();
  123. }
  124.  
  125. @Bean
  126. @ConfigurationProperties("vk")
  127. public ClientResources vk()
  128. {
  129. return new ClientResources();
  130. }
  131. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement