Advertisement
Guest User

Untitled

a guest
Nov 17th, 2019
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.78 KB | None | 0 0
  1. package rs.ac.uns.ftn.informatika.spring.security.config;
  2.  
  3. import org.springframework.beans.factory.annotation.Autowired;
  4. import org.springframework.context.annotation.Bean;
  5. import org.springframework.context.annotation.Configuration;
  6. import org.springframework.http.HttpMethod;
  7. import org.springframework.security.authentication.AuthenticationManager;
  8. import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
  9. import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
  10. import org.springframework.security.config.annotation.web.builders.HttpSecurity;
  11. import org.springframework.security.config.annotation.web.builders.WebSecurity;
  12. import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
  13. import org.springframework.security.config.http.SessionCreationPolicy;
  14. import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
  15. import org.springframework.security.crypto.password.PasswordEncoder;
  16. import org.springframework.security.web.authentication.www.BasicAuthenticationFilter;
  17.  
  18. import rs.ac.uns.ftn.informatika.spring.security.security.TokenUtils;
  19. import rs.ac.uns.ftn.informatika.spring.security.security.auth.RestAuthenticationEntryPoint;
  20. import rs.ac.uns.ftn.informatika.spring.security.security.auth.TokenAuthenticationFilter;
  21. import rs.ac.uns.ftn.informatika.spring.security.service.impl.CustomUserDetailsService;
  22.  
  23. @Configuration
  24. @EnableGlobalMethodSecurity(prePostEnabled = true)
  25. public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
  26.  
  27. // Implementacija PasswordEncoder-a koriscenjem BCrypt hashing funkcije.
  28. // BCrypt po defalt-u radi 10 rundi hesiranja prosledjene vrednosti.
  29. @Bean
  30. public PasswordEncoder passwordEncoder() {
  31. return new BCryptPasswordEncoder();
  32. }
  33.  
  34. @Autowired
  35. private CustomUserDetailsService jwtUserDetailsService;
  36.  
  37. // Neautorizovani pristup zastcenim resursima
  38. @Autowired
  39. private RestAuthenticationEntryPoint restAuthenticationEntryPoint;
  40.  
  41. @Bean
  42. @Override
  43. public AuthenticationManager authenticationManagerBean() throws Exception {
  44. return super.authenticationManagerBean();
  45. }
  46.  
  47. // Definisemo nacin autentifikacije
  48. @Autowired
  49. public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
  50. auth.userDetailsService(jwtUserDetailsService).passwordEncoder(passwordEncoder());
  51. }
  52.  
  53. @Autowired
  54. TokenUtils tokenUtils;
  55.  
  56. // Definisemo prava pristupa odredjenim URL-ovima
  57. @Override
  58. protected void configure(HttpSecurity http) throws Exception {
  59. http
  60. // komunikacija izmedju klijenta i servera je stateless
  61. .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()
  62.  
  63. // za neautorizovane zahteve posalji 401 gresku
  64. .exceptionHandling().authenticationEntryPoint(restAuthenticationEntryPoint).and()
  65.  
  66. // svim korisnicima dopusti da pristupe putanjama /auth/**, /h2-console/** i /api/foo
  67. .authorizeRequests().antMatchers("/auth/**").permitAll().antMatchers("/h2-console/**").permitAll().antMatchers("/api/foo").permitAll()
  68.  
  69. // svaki zahtev mora biti autorizovan
  70. .anyRequest().authenticated().and()
  71.  
  72. .cors().and()
  73.  
  74. // presretni svaki zahtev filterom
  75. .addFilterBefore(new TokenAuthenticationFilter(tokenUtils, jwtUserDetailsService),
  76. BasicAuthenticationFilter.class);
  77.  
  78. http.csrf().disable();
  79. }
  80.  
  81. // Generalna bezbednost aplikacije
  82. @Override
  83. public void configure(WebSecurity web) throws Exception {
  84. // TokenAuthenticationFilter ce ignorisati sve ispod navedene putanje
  85. web.ignoring().antMatchers(HttpMethod.POST, "/auth/login");
  86. web.ignoring().antMatchers(HttpMethod.GET, "/", "/webjars/**", "/*.html", "/favicon.ico", "/**/*.html",
  87. "/**/*.css", "/**/*.js");
  88. }
  89.  
  90. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement