You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

72 lines
3.2 KiB

  1. package com.ffii.tsms.config.security;
  2. import org.springframework.beans.factory.annotation.Autowired;
  3. import org.springframework.beans.factory.annotation.Qualifier;
  4. import org.springframework.context.annotation.Bean;
  5. import org.springframework.context.annotation.Configuration;
  6. import org.springframework.context.annotation.Lazy;
  7. import org.springframework.core.annotation.Order;
  8. import org.springframework.http.HttpStatus;
  9. import org.springframework.ldap.core.support.BaseLdapPathContextSource;
  10. import org.springframework.security.authentication.AuthenticationManager;
  11. import org.springframework.security.config.Customizer;
  12. import org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration;
  13. import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity;
  14. import org.springframework.security.config.annotation.web.builders.HttpSecurity;
  15. import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
  16. import org.springframework.security.config.http.SessionCreationPolicy;
  17. import org.springframework.security.config.ldap.LdapBindAuthenticationManagerFactory;
  18. import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
  19. import org.springframework.security.crypto.password.PasswordEncoder;
  20. import org.springframework.security.web.SecurityFilterChain;
  21. import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
  22. import com.ffii.tsms.config.security.jwt.JwtRequestFilter;
  23. @Configuration
  24. @EnableWebSecurity
  25. @EnableMethodSecurity
  26. public class SecurityConfig {
  27. public static final String INDEX_URL = "/";
  28. public static final String LOGIN_URL = "/login";
  29. public static final String LDAP_LOGIN_URL = "/ldap-login";
  30. public static final String[] URL_WHITELIST = {
  31. INDEX_URL,
  32. LOGIN_URL,
  33. LDAP_LOGIN_URL
  34. };
  35. @Lazy
  36. @Autowired
  37. private JwtRequestFilter jwtRequestFilter;
  38. @Bean
  39. @Qualifier("AuthenticationManager")
  40. public AuthenticationManager authenticationManager(AuthenticationConfiguration authenticationConfiguration)
  41. throws Exception {
  42. return authenticationConfiguration.getAuthenticationManager();
  43. }
  44. @Bean
  45. public PasswordEncoder passwordEncoder() {
  46. return new BCryptPasswordEncoder();
  47. }
  48. @Bean
  49. @Order(1)
  50. public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
  51. return http
  52. .cors(Customizer.withDefaults()).csrf(csrf -> csrf.disable())
  53. .requestCache(requestCache -> requestCache.disable())
  54. .authorizeHttpRequests(
  55. authRequest -> authRequest.requestMatchers(URL_WHITELIST).permitAll().anyRequest().authenticated())
  56. .httpBasic(httpBasic -> httpBasic.authenticationEntryPoint(
  57. (request, response, authException) -> response.sendError(HttpStatus.UNAUTHORIZED.value())))
  58. .sessionManagement(
  59. sessionManagement -> sessionManagement.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
  60. .addFilterBefore(jwtRequestFilter, UsernamePasswordAuthenticationFilter.class)
  61. .build();
  62. }
  63. }