Last active
June 10, 2018 19:37
-
-
Save OmarElgabry/5bb77b6fd8c12f57402aca14f45da3da to your computer and use it in GitHub Desktop.
Auth Service Security Configurations
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| package com.eureka.auth.security; | |
| import javax.servlet.http.HttpServletResponse; | |
| import org.springframework.beans.factory.annotation.Autowired; | |
| import org.springframework.context.annotation.Bean; | |
| import org.springframework.http.HttpMethod; | |
| import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; | |
| import org.springframework.security.config.annotation.web.builders.HttpSecurity; | |
| import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; | |
| import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; | |
| import org.springframework.security.config.http.SessionCreationPolicy; | |
| import org.springframework.security.core.userdetails.UserDetailsService; | |
| import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; | |
| import com.eureka.auth.security.JwtConfig; | |
| @EnableWebSecurity // Enable security config. This annotation denotes config for spring security. | |
| public class SecurityCredentialsConfig extends WebSecurityConfigurerAdapter { | |
| @Autowired | |
| private UserDetailsService userDetailsService; | |
| @Autowired | |
| private JwtConfig jwtConfig; | |
| @Override | |
| protected void configure(HttpSecurity http) throws Exception { | |
| http | |
| .csrf().disable() | |
| // make sure we use stateless session; session won't be used to store user's state. | |
| .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS) | |
| .and() | |
| // handle an authorized attempts | |
| .exceptionHandling().authenticationEntryPoint((req, rsp, e) -> rsp.sendError(HttpServletResponse.SC_UNAUTHORIZED)) | |
| .and() | |
| // Add a filter to validate user credentials and add token in the response header | |
| // What's the authenticationManager()? | |
| // An object provided by WebSecurityConfigurerAdapter, used to authenticate the user passing user's credentials | |
| // The filter needs this auth manager to authenticate the user. | |
| .addFilter(new JwtUsernameAndPasswordAuthenticationFilter(authenticationManager(), jwtConfig)) | |
| .authorizeRequests() | |
| // allow all POST requests | |
| .antMatchers(HttpMethod.POST, jwtConfig.getUri()).permitAll() | |
| // any other requests must be authenticated | |
| .anyRequest().authenticated(); | |
| } | |
| // Spring has UserDetailsService interface, which can be overriden to provide our implementation for fetching user from database (or any other source). | |
| // The UserDetailsService object is used by the auth manager to load the user from database. | |
| // In addition, we need to define the password encoder also. So, auth manager can compare and verify passwords. | |
| @Override | |
| protected void configure(AuthenticationManagerBuilder auth) throws Exception { | |
| auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder()); | |
| } | |
| @Bean | |
| public JwtConfig jwtConfig() { | |
| return new JwtConfig(); | |
| } | |
| @Bean | |
| public BCryptPasswordEncoder passwordEncoder() { | |
| return new BCryptPasswordEncoder(); | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment