How to apply spring security filter only on secured endpoints?

前端 未结 6 586
时光说笑
时光说笑 2020-12-01 05:25

I have the following Spring Security configuration:

    httpSecurity
            .csrf()
            .disable()
            .exceptionHandling()
                     


        
6条回答
  •  时光说笑
    2020-12-01 06:11

    My Requirement was to exclude the endpoint matching /api/auth/**, to achieve the same I have configured my WebSecurityConfig spring configuration component as follows:

    /**
     * The purpose of this method is to exclude the URL's specific to Login, Swagger UI and static files.
     * Any URL that should be excluded from the Spring security chain should be added to the ignore list in this
     * method only
     */
    @Override
    public void configure(WebSecurity web) throws Exception {
        web.ignoring().antMatchers("/api/auth/**","/v2/api-docs", 
                "/configuration/ui", 
                "/swagger-resources", 
                "/configuration/security",
                "/swagger-ui.html", 
                "/webjars/**",
                "/favicon.ico",
                "/**/*.png",
                "/**/*.gif",
                "/**/*.svg",
                "/**/*.jpg",
                "/**/*.html",
                "/**/*.css",
                "/**/*.js");
    }
    
    
       /**
         * The purpose of this method is to define the HTTP configuration that defines how an HTTP request is 
         * going to be treated by the Spring Security chain. All the request URL's (excluding the URL's added
         * in WebSecurity configuration ignore list) matching this configuration have to pass through the
         * custom Spring security filter defined in this method
         */
        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http.csrf().disable()
            .cors().disable()
            .authorizeRequests()
            .anyRequest()
            .authenticated()
            .and()
            .exceptionHandling()
            .authenticationEntryPoint(unauthorizedHandler)
            .and()
            .sessionManagement()
            .sessionCreationPolicy(SessionCreationPolicy.STATELESS)
            .and()
            .addFilterBefore(authenticationTokenFilterBean(), UsernamePasswordAuthenticationFilter.class);
        }
    
    /**
     * The purpose of this method is to create a new instance of JWTAuthenticationFilter
     * and return the same from the method body. It must be ensured that this filter should
     * not be configured as a Spring bean or registered into the Spring Application context
     * failing which the below filter shall be registered as a default web filter, and thus
     * all the URL's even the excluded ones shall be intercepted by the below filter
     */
    public JWTAuthenticationFilter authenticationTokenFilterBean() {
        return new JWTAuthenticationFilter();
    }
    

提交回复
热议问题