代码之家  ›  专栏  ›  技术社区  ›  lemoncodes

禁止使用Spring安全HTTP 403

  •  0
  • lemoncodes  · 技术社区  · 7 年前

    /auth/**

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        logger.info("Setting Endpoint Security.");
    
        http
            .authorizeRequests()
            .antMatchers("/auth/**").permitAll()
            .anyRequest().authenticated()
            .and()
            .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
            .and()
            .csrf().disable();
    
    }
    

    WebSecurityConfig 类扩展 WebSecurityConfigurerAdapter

    下面是spring安全调试日志

    2018-11-18 20:14:27.923  INFO 8476 --- [nio-8080-exec-1] Spring Security Debugger                 : 
    
    ************************************************************
    
    Request received for POST '/api/v1/auth/login':
    
    org.apache.catalina.connector.RequestFacade@1a183946
    
    servletPath:/api/v1
    pathInfo:/auth/login
    headers: 
    content-type: application/x-www-form-urlencoded
    cache-control: no-cache
    postman-token: 5bd56859-b8e9-4ebf-977c-452f1bce837e
    user-agent: PostmanRuntime/7.4.0
    accept: */*
    host: localhost:8080
    cookie: JSESSIONID=D80F964AA5B53DC7F20ACF59606FA719
    accept-encoding: gzip, deflate
    content-length: 29
    connection: keep-alive
    
    
    Security filter chain: [
      WebAsyncManagerIntegrationFilter
      SecurityContextPersistenceFilter
      HeaderWriterFilter
      LogoutFilter
      RequestCacheAwareFilter
      SecurityContextHolderAwareRequestFilter
      AnonymousAuthenticationFilter
      SessionManagementFilter
      ExceptionTranslationFilter
      FilterSecurityInterceptor
    ]
    
    
    ************************************************************
    

    这是我试图访问的资源

    @Path("/auth")
    @Component
    public class Auth {
    
        private static final Logger logger = LoggerFactory.getLogger(Auth.class);
    
        @POST
        @Path("/login")
        @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
        public Response login(@FormParam("username") String user, 
                              @FormParam("password") String pass) {
            logger.info("Form-data [username] {}",user);
            logger.info("Form-data [password] {}",pass);
            return Response.ok().build();
        }
    
        @POST
        @Path("/logout")
        @Produces({ MediaType.APPLICATION_JSON })
        public String logout() {
            return "Login!";
        } 
    
    }
    

    我们很清楚,我使用的是Jersey+Spring Boot

    @Configuration
    @ApplicationPath("api/v1")
    public class JerseyConfig extends ResourceConfig{
        public JerseyConfig() {
    
        }
    
        @PostConstruct
        public void setUp() {
            register(Wish.class);
            register(Auth.class);
            register(User.class);
            register(GenericExceptionMapper.class);
        }
    }
    

    现在,据我在网上了解 http configure 方法。

    如果允许,其他请求需要授权。然而,当我尝试请求 http://localhost:8080/api/v1/auth/login 403 Forbidden .

    1 回复  |  直到 7 年前
        1
  •  2
  •   stacker    7 年前

    您的配置仅允许 http://localhost:8080/auth/ **不是 http://localhost:8080/api/v1/auth/

    因此,将其更改为:

    .antMatchers("/api/v1/auth/**").permitAll()
    

    它应该是订单中的第一个

    推荐文章