Deshabilitar la Primavera de Seguridad para las OPCIONES de Método Http

Es posible deshabilitar la Primavera de la Seguridad de un tipo de Método HTTP?

Tenemos una Primavera RESTO de la aplicación con los servicios que requieren token de Autorización para ser conectado en el encabezado de solicitud http. Estoy escribiendo un JS cliente para él y usando JQuery para enviar el GET/POST solicitudes. La aplicación es CORS habilitado con este filtro de código.

doFilter(....) {

  HttpServletResponse httpResp = (HttpServletResponse) response;
  httpResp.setHeader("Access-Control-Allow-Origin", "*");
  httpResp.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
  httpResp.setHeader("Access-Control-Max-Age", "3600");
  Enumeration<String> headersEnum = ((HttpServletRequest) request).getHeaders("Access-Control-Request-Headers");
  StringBuilder headers = new StringBuilder();
  String delim = "";
  while (headersEnum.hasMoreElements()) {
    headers.append(delim).append(headersEnum.nextElement());
    delim = ", ";
  }
  httpResp.setHeader("Access-Control-Allow-Headers", headers.toString());
}

Pero cuando JQuery envía la solicitud de OPCIONES para CORS, el servidor responde con un Error en la Autorización de token. Claramente la solicitud de OPCIONES, carece de token de Autorización. Por lo tanto, es posible que las OPCIONES de escapar de la Capa de Seguridad a partir de la Primavera de la Configuración de Seguridad?

5 Kommentare

  1. 11

    ¿Has probado este

    Puede utilizar varios elementos para definir las diferentes
    requisitos de acceso para los diferentes conjuntos de direcciones Url, sino que serán
    evalúan en el orden en que aparecen y el primer partido va a ser utilizado. Así que
    debe poner el más específico de los partidos de la parte superior. También puede agregar un
    atributo método para limitar el partido a un particular método HTTP (GET,
    POST, PUT, etc.).

    <http auto-config="true">
        <intercept-url pattern="/client/edit" access="isAuthenticated" method="GET" />
        <intercept-url pattern="/client/edit" access="hasRole('EDITOR')" method="POST" />
    </http>

    Más significa que usted necesita para seleccionar el patrón de url para interceptar y qué métodos desea

    • Pero supongo que no podemos tener algo como <intercept-url pattern="/client/edit" access="hasRole('EDITOR')" method="POST, OPTIONS" /> . A la derecha ?
    • De acuerdo a la springframework.org/schema/security/spring-security-3.1.xsd, no me lo creo
    • ¿Cómo funcionaría esto en el caso de @Preautorizar anotación, quiero Poner los métodos para tener acceso de Administrador y métodos Post para tener acceso de Usuario
    • ¿Cuál será su equivalente en java config
    • por favor, eche un vistazo a mi problema. stackoverflow.com/questions/50579277/…
  2. 130

    Si usted está utilizando una anotación de seguridad basada en fichero de configuración (@EnableWebSecurity & @Configuration), puedes hacer algo como la siguiente en la configure() método para permitir la OPTION solicita que se permita, en la Primavera de de Seguridad sin necesidad de autenticación para una determinada ruta de acceso:

    @Override
    protected void configure(HttpSecurity http) throws Exception
    {
         http
        .csrf().disable()
        .authorizeRequests()
          .antMatchers(HttpMethod.OPTIONS,"/path/to/allow").permitAll()//allow CORS option calls
          .antMatchers("/resources/**").permitAll()
          .anyRequest().authenticated()
        .and()
        .formLogin()
        .and()
        .httpBasic();
    }
    • +1 Exactamente lo que hicimos para habilitar CORS OPCIONES de las solicitudes.
    • Usted ha hecho mi semana…
    • se trabaja bien, Gracias por tus consejos me busca y depurar mucho, pero no se puede fijar ahora me fijo a utilizar este consejos
    • He encontrado tu respuesta, mientras que la investigación de un problema similar que aún no responde a la solución en su forma actual. Está usted dispuesto a echar un vistazo? Aquí está el enlace: stackoverflow.com/questions/36705874/…
    • Esto podría ayudar para una comprensión general: docs.de la primavera.io/primavera-seguridad/sitio/docs/4.1.3.RELEASE/…
    • Yo no soy de Java Primavera de usuario, yo estoy teniendo el mismo problema en mi final el uso de diferentes idiomas en el backend. Hace Java/Spring traer cualquier abstracción adicional en la seguridad o casi todo es seguro ignorar la autenticación de middleware método para todas las OPCIONES de las solicitudes?
    • No funciona para mí. Aquí está mi problema, podría usted por favor, eche un vistazo.
    • stackoverflow.com/questions/50579277/…
    • Que funciona para mí. Recuerde que la diferencia de un asterisco y doble asterisco se refiere a las rutas. antMatchers(HttpMethod.OPCIONES,»/descanso/auth/**»).permitAll() stackoverflow.com/questions/12569308/…
    • Con el fin de abrir un POST en el extremo de las solicitudes de los clientes está disponible la configuración de seguridad siguientes: .antMatchers(HttpMethod.POST,»/ruta/a/post/solicitud»)

  3. 39

    Permitir todas las OPCIONES en contexto:

        @Override
        public void configure(WebSecurity web) throws Exception {
            web.ignoring().antMatchers(HttpMethod.OPTIONS, "/**");
        }
    • Esta parecía ser la única manera de permitir OPCIONES de las peticiones sin necesidad de auhorization.
    • Si, a continuación, crear una de las Opciones extremo que desee seguro, te voy a olvidar acerca de la exclusión en su configuración y todo el mundo puede acceder a ella. Usted debe considerar el uso del filtro para permitir cors opción solicita ser excluido de la primavera-seguridad: docs.de la primavera.io/primavera-seguridad/sitio/docs/4.2.x/referencia/html/…
    • Con HttpSecurity es http.authorizeRequests() .antMatchers(HttpMethod.OPCIONES, «/registrybrain/**»).permitAll()
    • Pasaron más de 2 horas y tratando de encontrar una solución – sólo esto funcionó.
    • «Si usted, a continuación, crear una de las Opciones extremo que desee seguro» @Tim ¿por qué alguien necesita que?
    • Tio me has salvado. Un millón de gracias

  4. 3

    En caso de que alguien está buscando una solución fácil de usar de la Primavera de Arranque. Sólo tiene que añadir un adicional de frijol:

       @Bean
       public IgnoredRequestCustomizer optionsIgnoredRequestsCustomizer() {
          return configurer -> {
             List<RequestMatcher> matchers = new ArrayList<>();
             matchers.add(new AntPathRequestMatcher("/**", "OPTIONS"));
             configurer.requestMatchers(new OrRequestMatcher(matchers));
          };
       }

    Por favor, tenga en cuenta que dependiendo de su aplicación, esto puede abrir para posibles ataques.

    Abre problema para una solución mejor: https://github.com/spring-projects/spring-security/issues/4448

  5. -1

    En algunos casos, es necesario agregar configuration.setAllowedHeaders(Arrays.asList("Content-Type")); a corsConfigurationSource() cuando se utiliza WebSecurityConfigurerAdapter para resolver el cors problema.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea