|
|
@@ -0,0 +1,145 @@
|
|
|
+package com.example.jpatest.security;
|
|
|
+
|
|
|
+import org.springframework.beans.factory.annotation.Qualifier;
|
|
|
+import org.springframework.beans.factory.annotation.Value;
|
|
|
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
|
|
+import org.springframework.context.annotation.Bean;
|
|
|
+import org.springframework.http.HttpMethod;
|
|
|
+import org.springframework.security.authentication.AuthenticationManager;
|
|
|
+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.config.http.SessionCreationPolicy;
|
|
|
+import org.springframework.security.core.userdetails.UserDetailsService;
|
|
|
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
|
|
|
+import org.springframework.security.crypto.password.PasswordEncoder;
|
|
|
+
|
|
|
+@EnableWebSecurity
|
|
|
+@EnableGlobalMethodSecurity(prePostEnabled = true)
|
|
|
+@EnableConfigurationProperties({JwtConfig.class})
|
|
|
+public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
|
|
|
+
|
|
|
+ private final JwtAuthenticationEntryPoint unauthorizedHandler;
|
|
|
+ private final UserDetailsService userDetailsService;
|
|
|
+ private final String tokenHeader;
|
|
|
+
|
|
|
+ public WebSecurityConfig(JwtAuthenticationEntryPoint unauthorizedHandler,
|
|
|
+ @Qualifier("jwtUserDetailsService") UserDetailsService userDetailsService,
|
|
|
+ @Value("${jwt.header}") String tokenHeader) {
|
|
|
+ this.unauthorizedHandler = unauthorizedHandler;
|
|
|
+ this.userDetailsService = userDetailsService;
|
|
|
+ this.tokenHeader = tokenHeader;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ protected void configure(AuthenticationManagerBuilder auth) throws Exception {
|
|
|
+ auth.userDetailsService(userDetailsService)
|
|
|
+ .passwordEncoder(passwordEncoderBean());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Bean
|
|
|
+ public PasswordEncoder passwordEncoderBean() {
|
|
|
+ return new BCryptPasswordEncoder();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Bean
|
|
|
+ @Override
|
|
|
+ public AuthenticationManager authenticationManagerBean() throws Exception {
|
|
|
+ return super.authenticationManagerBean();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ protected void configure(HttpSecurity httpSecurity) throws Exception {
|
|
|
+ // We don't need CSRF for this example
|
|
|
+ httpSecurity.csrf().disable()
|
|
|
+ .cors().and()
|
|
|
+ // dont authenticate this particular request
|
|
|
+ .authorizeRequests()
|
|
|
+ //swagger-ui放行路径
|
|
|
+ .antMatchers("/v2/api-docs", "/swagger-ui.html", "/swagger-resources/**", "/webjars/**").permitAll()
|
|
|
+ .antMatchers("/user/register").permitAll()
|
|
|
+ .antMatchers("/upload/**").permitAll()
|
|
|
+ .antMatchers("/files/**").permitAll()
|
|
|
+ .antMatchers("/static/**").permitAll()
|
|
|
+ .antMatchers("/auth/**").permitAll()
|
|
|
+ .antMatchers("/captcha/**").permitAll()
|
|
|
+ .antMatchers("/admin/**").permitAll()
|
|
|
+ .antMatchers("/systemVariable/all").permitAll()
|
|
|
+ .antMatchers("/**/excel").permitAll()
|
|
|
+ .antMatchers("/wx/**").permitAll()
|
|
|
+ .antMatchers("/sms/sendVerify").permitAll()
|
|
|
+ .antMatchers("/sms/verify").permitAll()
|
|
|
+ .antMatchers("/error").permitAll()
|
|
|
+ .antMatchers("/401").permitAll()
|
|
|
+ .antMatchers("/404").permitAll()
|
|
|
+ .antMatchers("/500").permitAll()
|
|
|
+ .antMatchers("/MP_verify*").permitAll()
|
|
|
+ .antMatchers("/payOrder/**").permitAll()
|
|
|
+ .antMatchers("/notify/**").permitAll()
|
|
|
+ .antMatchers("/banner/all").permitAll()
|
|
|
+ .antMatchers("/collection/all").permitAll()
|
|
|
+ .antMatchers("/collection/get/**").permitAll()
|
|
|
+ .antMatchers("/asset/get/**").permitAll()
|
|
|
+ .antMatchers("/asset/tokenHistory").permitAll()
|
|
|
+ .antMatchers("/user/all").permitAll()
|
|
|
+ .antMatchers("/user/get/*").permitAll()
|
|
|
+ .antMatchers("/news/all").permitAll()
|
|
|
+ .antMatchers("/news/get/*").permitAll()
|
|
|
+ .antMatchers("/user/forgotPassword").permitAll()
|
|
|
+ .antMatchers("/sysConfig/get/*").permitAll()
|
|
|
+ .antMatchers("/sysConfig/getDecimal/*").permitAll()
|
|
|
+ .antMatchers("/user/code2openId").permitAll()
|
|
|
+ .antMatchers("/blindBoxItem/all").permitAll()
|
|
|
+ .antMatchers("/collection/recommend").permitAll()
|
|
|
+ .antMatchers("/order/**/status").permitAll()
|
|
|
+ .antMatchers("/order/checkLimit").permitAll()
|
|
|
+ .antMatchers("/mintOrder/**/status").permitAll()
|
|
|
+ .antMatchers("/activity/all").permitAll()
|
|
|
+ .antMatchers("/activity/get/*").permitAll()
|
|
|
+ .antMatchers("/mintActivity/all").permitAll()
|
|
|
+ .antMatchers("/mintActivity/get/**").permitAll()
|
|
|
+ .antMatchers("/purchaseLevel/all").permitAll()
|
|
|
+ .antMatchers("/purchaseLevel/get/**").permitAll()
|
|
|
+ .antMatchers("/appVersion/checkIosReview").permitAll()
|
|
|
+ .antMatchers("/appVersion/checkAndroidReview").permitAll()
|
|
|
+ .antMatchers("/news/all").permitAll()
|
|
|
+ .antMatchers("/news/get/**").permitAll()
|
|
|
+ .antMatchers("/druid/**").permitAll()
|
|
|
+ .antMatchers("/identityAuth/autoAuth").permitAll()
|
|
|
+ .antMatchers("/statistic/weekTop").permitAll()
|
|
|
+ .antMatchers("/showroom/all").permitAll()
|
|
|
+ .antMatchers("/showroom/get/**").permitAll()
|
|
|
+ .antMatchers("/testClass/**").permitAll()
|
|
|
+ // all other requests need to be authenticated
|
|
|
+ .anyRequest().authenticated().and()
|
|
|
+ // make sure we use stateless session; session won't be used to
|
|
|
+ // store user's state.
|
|
|
+ .exceptionHandling().authenticationEntryPoint(unauthorizedHandler)
|
|
|
+ .and().sessionManagement()
|
|
|
+ .sessionCreationPolicy(SessionCreationPolicy.STATELESS);
|
|
|
+ // Add a filter to validate the tokens with every request
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void configure(WebSecurity web) throws Exception {
|
|
|
+ // AuthenticationTokenFilter will ignore the below paths
|
|
|
+ web.ignoring()
|
|
|
+ .antMatchers("/auth/**")
|
|
|
+
|
|
|
+ // allow anonymous resource requests
|
|
|
+ .and()
|
|
|
+ .ignoring()
|
|
|
+ .antMatchers(
|
|
|
+ HttpMethod.GET,
|
|
|
+ "/**",
|
|
|
+ "/*.html",
|
|
|
+ "/**/favicon.ico",
|
|
|
+ "/**/*.html",
|
|
|
+ "/**/*.css",
|
|
|
+ "/**/*.js"
|
|
|
+ );
|
|
|
+ }
|
|
|
+}
|