@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity
(prePostEnabled =
true
)
public
class
WebSecurityConfig
extends
WebSecurityConfigurerAdapter {
private
final
JwtAuthenticationEntryPoint unauthorizedHandler;
private
final
AccessDeniedHandler accessDeniedHandler;
private
final
UserDetailsService CustomUserDetailsService;
private
final
JwtAuthenticationTokenFilter authenticationTokenFilter;
@Autowired
public
WebSecurityConfig(JwtAuthenticationEntryPoint unauthorizedHandler,
@Qualifier
(
"RestAuthenticationAccessDeniedHandler"
) AccessDeniedHandler accessDeniedHandler,
@Qualifier
(
"CustomUserDetailsService"
) UserDetailsService CustomUserDetailsService,
JwtAuthenticationTokenFilter authenticationTokenFilter) {
this
.unauthorizedHandler = unauthorizedHandler;
this
.accessDeniedHandler = accessDeniedHandler;
this
.CustomUserDetailsService = CustomUserDetailsService;
this
.authenticationTokenFilter = authenticationTokenFilter;
}
@Autowired
public
void
configureAuthentication(AuthenticationManagerBuilder authenticationManagerBuilder)
throws
Exception {
authenticationManagerBuilder
.userDetailsService(
this
.CustomUserDetailsService)
.passwordEncoder(passwordEncoder());
}
@Bean
public
PasswordEncoder passwordEncoder() {
return
new
BCryptPasswordEncoder();
}
@Override
protected
void
configure(HttpSecurity httpSecurity)
throws
Exception {
httpSecurity
.exceptionHandling().accessDeniedHandler(accessDeniedHandler).and()
.csrf().disable()
.exceptionHandling().authenticationEntryPoint(unauthorizedHandler).and()
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()
.authorizeRequests()
.antMatchers(
"/api/v1/auth"
,
"/api/v1/signout"
,
"/error/**"
,
"/api/**"
).permitAll()
.anyRequest().authenticated();
httpSecurity.headers().cacheControl();
httpSecurity
.addFilterBefore(authenticationTokenFilter, UsernamePasswordAuthenticationFilter.
class
);
}
@Override
public
void
configure(WebSecurity web)
throws
Exception {
web.ignoring().antMatchers(
"/v2/api-docs"
,
"/swagger-resources/configuration/ui"
,
"/swagger-resources"
,
"/swagger-resources/configuration/security"
,
"/swagger-ui.html"
);
}
@Bean
@Override
public
AuthenticationManager authenticationManagerBean()
throws
Exception {
return
super
.authenticationManagerBean();
}
}