content: package com.genshin.ojuser.config;
  
  
  import com.genshin.ojuser.filter.JwtAuthenticationTokenFilter;
  import org.springframework.beans.factory.annotation.Autowired;
  import org.springframework.context.annotation.Bean;
  import org.springframework.context.annotation.Configuration;
  import org.springframework.security.authentication.AuthenticationManager;
  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.configuration.WebSecurityConfigurerAdapter;
  import org.springframework.security.config.http.SessionCreationPolicy;
  import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
  import org.springframework.security.crypto.password.PasswordEncoder;
  import org.springframework.security.web.AuthenticationEntryPoint;
  import org.springframework.security.web.access.AccessDeniedHandler;
  import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
  
  @Configuration
  // 配置权限
  @EnableGlobalMethodSecurity(prePostEnabled = true)
  public class SecurityConfig extends WebSecurityConfigurerAdapter {
  
  
      @Bean
      public PasswordEncoder passwordEncoder(){
          return new BCryptPasswordEncoder();
      }
      @Autowired
      private AuthenticationEntryPoint authenticationEntryPoint;
  
      @Autowired
      private JwtAuthenticationTokenFilter jwtAuthenticationTokenFilter;
      @Autowired
      private AccessDeniedHandler accessDeniedHandler;
      @Override
      protected void configure(HttpSecurity http) throws Exception {
          http
                  .csrf().disable()
                  .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
                  .and()
                  .authorizeRequests()
                  .antMatchers("/user/login").anonymous()
                  .antMatchers("/doc.html","/swagger-resources/**", "/webjars/**",
                          "/v2/**", "/swagger-ui.html/**").permitAll()
                  // 用户注册放开
                  .antMatchers("/user/register").permitAll()
                  .anyRequest().authenticated();
          // 添加过滤器
  
          http.addFilterBefore(jwtAuthenticationTokenFilter , UsernamePasswordAuthenticationFilter.class);
          // 配置异常处理器
          http.exceptionHandling()
                  // 配置认证失败处理器
                  .authenticationEntryPoint(authenticationEntryPoint)
                  .accessDeniedHandler(accessDeniedHandler);
          // 允许跨域
          http.cors();
      }
  
      @Bean
      @Override
      public AuthenticationManager authenticationManagerBean() throws Exception {
          return super.authenticationManagerBean();
      }
  
  }
  