Last active
May 28, 2018 09:36
-
-
Save Tonterias/4db019c2e741813ae3004c88aa5e8441 to your computer and use it in GitHub Desktop.
Jhipster Message App
This file contains 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 es3.config; | |
import es3.security.*; | |
import io.github.jhipster.config.JHipsterProperties; | |
import io.github.jhipster.security.*; | |
import org.springframework.beans.factory.BeanInitializationException; | |
import org.springframework.context.annotation.Bean; | |
import org.springframework.context.annotation.Configuration; | |
import org.springframework.context.annotation.Import; | |
import org.springframework.http.HttpMethod; | |
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; | |
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; | |
import org.springframework.security.config.annotation.web.builders.HttpSecurity; | |
import org.springframework.security.config.annotation.web.builders.WebSecurity; | |
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; | |
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; | |
import org.springframework.security.core.userdetails.UserDetailsService; | |
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; | |
import org.springframework.security.crypto.password.PasswordEncoder; | |
import org.springframework.security.web.authentication.RememberMeServices; | |
import org.springframework.security.web.csrf.CookieCsrfTokenRepository; | |
import org.springframework.security.web.csrf.CsrfFilter; | |
import org.springframework.web.filter.CorsFilter; | |
import org.zalando.problem.spring.web.advice.security.SecurityProblemSupport; | |
import javax.annotation.PostConstruct; | |
@Configuration | |
@Import(SecurityProblemSupport.class) | |
@EnableWebSecurity | |
@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true) | |
public class SecurityConfiguration extends WebSecurityConfigurerAdapter { | |
private final AuthenticationManagerBuilder authenticationManagerBuilder; | |
private final UserDetailsService userDetailsService; | |
private final JHipsterProperties jHipsterProperties; | |
private final RememberMeServices rememberMeServices; | |
private final CorsFilter corsFilter; | |
private final SecurityProblemSupport problemSupport; | |
public SecurityConfiguration(AuthenticationManagerBuilder authenticationManagerBuilder, UserDetailsService userDetailsService, | |
JHipsterProperties jHipsterProperties, RememberMeServices rememberMeServices,CorsFilter corsFilter, SecurityProblemSupport problemSupport) { | |
this.authenticationManagerBuilder = authenticationManagerBuilder; | |
this.userDetailsService = userDetailsService; | |
this.jHipsterProperties = jHipsterProperties; | |
this.rememberMeServices = rememberMeServices; | |
this.corsFilter = corsFilter; | |
this.problemSupport = problemSupport; | |
} | |
@PostConstruct | |
public void init() { | |
try { | |
authenticationManagerBuilder | |
.userDetailsService(userDetailsService) | |
.passwordEncoder(passwordEncoder()); | |
} catch (Exception e) { | |
throw new BeanInitializationException("Security configuration failed", e); | |
} | |
} | |
@Bean | |
public AjaxAuthenticationSuccessHandler ajaxAuthenticationSuccessHandler() { | |
return new AjaxAuthenticationSuccessHandler(); | |
} | |
@Bean | |
public AjaxAuthenticationFailureHandler ajaxAuthenticationFailureHandler() { | |
return new AjaxAuthenticationFailureHandler(); | |
} | |
@Bean | |
public AjaxLogoutSuccessHandler ajaxLogoutSuccessHandler() { | |
return new AjaxLogoutSuccessHandler(); | |
} | |
@Bean | |
public PasswordEncoder passwordEncoder() { | |
return new BCryptPasswordEncoder(); | |
} | |
@Override | |
public void configure(WebSecurity web) throws Exception { | |
web.ignoring() | |
.antMatchers(HttpMethod.OPTIONS, "/**") | |
.antMatchers("/app/**/*.{js,html}") | |
.antMatchers("/i18n/**") | |
.antMatchers("/content/**") | |
.antMatchers("/swagger-ui/index.html") | |
.antMatchers("/test/**") | |
.antMatchers("/h2-console/**"); | |
} | |
@Override | |
protected void configure(HttpSecurity http) throws Exception { | |
http | |
.csrf() | |
.csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse()) | |
.and() | |
.addFilterBefore(corsFilter, CsrfFilter.class) | |
.exceptionHandling() | |
.authenticationEntryPoint(problemSupport) | |
.accessDeniedHandler(problemSupport) | |
.and() | |
.rememberMe() | |
.rememberMeServices(rememberMeServices) | |
.rememberMeParameter("remember-me") | |
.key(jHipsterProperties.getSecurity().getRememberMe().getKey()) | |
.and() | |
.formLogin() | |
.loginProcessingUrl("/api/authentication") | |
.successHandler(ajaxAuthenticationSuccessHandler()) | |
.failureHandler(ajaxAuthenticationFailureHandler()) | |
.usernameParameter("j_username") | |
.passwordParameter("j_password") | |
.permitAll() | |
.and() | |
.logout() | |
.logoutUrl("/api/logout") | |
.logoutSuccessHandler(ajaxLogoutSuccessHandler()) | |
.permitAll() | |
.and() | |
.headers() | |
.frameOptions() | |
.disable() | |
.and() | |
.authorizeRequests() | |
//.antMatchers("/api/**").permitAll() | |
.antMatchers("/api/register").permitAll() | |
.antMatchers("/api/activate").permitAll() | |
.antMatchers("/api/authenticate").permitAll() | |
.antMatchers("/api/account/reset-password/init").permitAll() | |
.antMatchers("/api/account/reset-password/finish").permitAll() | |
.antMatchers("/api/profile-info").permitAll() | |
.antMatchers("/api/**").authenticated() | |
.antMatchers("/management/health").permitAll() | |
.antMatchers("/management/**").hasAuthority(AuthoritiesConstants.ADMIN) | |
.antMatchers("/v2/api-docs/**").permitAll() | |
.antMatchers("/swagger-resources/configuration/ui").permitAll() | |
.antMatchers("/swagger-ui/index.html").hasAuthority(AuthoritiesConstants.ADMIN) | |
.antMatchers(HttpMethod.GET, "/api/messages").permitAll(); | |
} | |
} |
This file contains 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 es3.config; | |
import es3.security.*; | |
import io.github.jhipster.config.JHipsterProperties; | |
import io.github.jhipster.security.*; | |
import org.springframework.beans.factory.BeanInitializationException; | |
import org.springframework.context.annotation.Bean; | |
import org.springframework.context.annotation.Configuration; | |
import org.springframework.context.annotation.Import; | |
import org.springframework.http.HttpMethod; | |
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; | |
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; | |
import org.springframework.security.config.annotation.web.builders.HttpSecurity; | |
import org.springframework.security.config.annotation.web.builders.WebSecurity; | |
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; | |
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; | |
import org.springframework.security.core.userdetails.UserDetailsService; | |
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; | |
import org.springframework.security.crypto.password.PasswordEncoder; | |
import org.springframework.security.web.authentication.RememberMeServices; | |
import org.springframework.security.web.csrf.CookieCsrfTokenRepository; | |
import org.springframework.security.web.csrf.CsrfFilter; | |
import org.springframework.web.filter.CorsFilter; | |
import org.zalando.problem.spring.web.advice.security.SecurityProblemSupport; | |
import javax.annotation.PostConstruct; | |
@Configuration | |
@Import(SecurityProblemSupport.class) | |
@EnableWebSecurity | |
@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true) | |
public class SecurityConfiguration extends WebSecurityConfigurerAdapter { | |
private final AuthenticationManagerBuilder authenticationManagerBuilder; | |
private final UserDetailsService userDetailsService; | |
private final JHipsterProperties jHipsterProperties; | |
private final RememberMeServices rememberMeServices; | |
private final CorsFilter corsFilter; | |
private final SecurityProblemSupport problemSupport; | |
public SecurityConfiguration(AuthenticationManagerBuilder authenticationManagerBuilder, UserDetailsService userDetailsService, | |
JHipsterProperties jHipsterProperties, RememberMeServices rememberMeServices,CorsFilter corsFilter, SecurityProblemSupport problemSupport) { | |
this.authenticationManagerBuilder = authenticationManagerBuilder; | |
this.userDetailsService = userDetailsService; | |
this.jHipsterProperties = jHipsterProperties; | |
this.rememberMeServices = rememberMeServices; | |
this.corsFilter = corsFilter; | |
this.problemSupport = problemSupport; | |
} | |
@PostConstruct | |
public void init() { | |
try { | |
authenticationManagerBuilder | |
.userDetailsService(userDetailsService) | |
.passwordEncoder(passwordEncoder()); | |
} catch (Exception e) { | |
throw new BeanInitializationException("Security configuration failed", e); | |
} | |
} | |
@Bean | |
public AjaxAuthenticationSuccessHandler ajaxAuthenticationSuccessHandler() { | |
return new AjaxAuthenticationSuccessHandler(); | |
} | |
@Bean | |
public AjaxAuthenticationFailureHandler ajaxAuthenticationFailureHandler() { | |
return new AjaxAuthenticationFailureHandler(); | |
} | |
@Bean | |
public AjaxLogoutSuccessHandler ajaxLogoutSuccessHandler() { | |
return new AjaxLogoutSuccessHandler(); | |
} | |
@Bean | |
public PasswordEncoder passwordEncoder() { | |
return new BCryptPasswordEncoder(); | |
} | |
@Override | |
public void configure(WebSecurity web) throws Exception { | |
web.ignoring() | |
.antMatchers(HttpMethod.OPTIONS, "/**") | |
.antMatchers("/app/**/*.{js,html}") | |
.antMatchers("/i18n/**") | |
.antMatchers("/content/**") | |
.antMatchers("/swagger-ui/index.html") | |
.antMatchers("/test/**") | |
.antMatchers("/h2-console/**"); | |
} | |
@Override | |
protected void configure(HttpSecurity http) throws Exception { | |
http | |
.csrf() | |
.csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse()) | |
.and() | |
.addFilterBefore(corsFilter, CsrfFilter.class) | |
.exceptionHandling() | |
.authenticationEntryPoint(problemSupport) | |
.accessDeniedHandler(problemSupport) | |
.and() | |
.rememberMe() | |
.rememberMeServices(rememberMeServices) | |
.rememberMeParameter("remember-me") | |
.key(jHipsterProperties.getSecurity().getRememberMe().getKey()) | |
.and() | |
.formLogin() | |
.loginProcessingUrl("/api/authentication") | |
.successHandler(ajaxAuthenticationSuccessHandler()) | |
.failureHandler(ajaxAuthenticationFailureHandler()) | |
.usernameParameter("j_username") | |
.passwordParameter("j_password") | |
.permitAll() | |
.and() | |
.logout() | |
.logoutUrl("/api/logout") | |
.logoutSuccessHandler(ajaxLogoutSuccessHandler()) | |
.permitAll() | |
.and() | |
.headers() | |
.frameOptions() | |
.disable() | |
.and() | |
.authorizeRequests() | |
.antMatchers("/api/register").permitAll() | |
.antMatchers("/api/activate").permitAll() | |
.antMatchers("/api/authenticate").permitAll() | |
.antMatchers("/api/account/reset-password/init").permitAll() | |
.antMatchers("/api/account/reset-password/finish").permitAll() | |
.antMatchers("/api/profile-info").permitAll() | |
.antMatchers(HttpMethod.GET, "/api/messages").permitAll() | |
.antMatchers("/api/**").authenticated() | |
.antMatchers("/management/health").permitAll() | |
.antMatchers("/management/**").hasAuthority(AuthoritiesConstants.ADMIN) | |
.antMatchers("/v2/api-docs/**").permitAll() | |
.antMatchers("/swagger-resources/configuration/ui").permitAll() | |
.antMatchers("/swagger-ui/index.html").hasAuthority(AuthoritiesConstants.ADMIN); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment