0

У меня работает RestController, и я хочу узнать, как включить Basic Auth с Spring Security.Spring Security не работает над RestServices

Я создал класс, который расширяет WebSecurityConfigurerAdapter и, насколько я понимаю, этого должно быть достаточно. К сожалению, я могу назвать ресурсы без предоставления учетных данных.

Вот мой код:

Configurer адаптер

package es.ieci.test.security; 

import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.security.config.annotation.web.builders.HttpSecurity; 
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; 

@Configuration 
@EnableWebSecurity 
public class SecurityConfiguration extends WebSecurityConfigurerAdapter { 

    public static final String REALM = "TEST_REALM"; 

    @Override 
    protected void configure(HttpSecurity http) throws Exception{ 

     http 
      .csrf().disable() 
      .authorizeRequests().antMatchers("/services/**").hasRole("ADMIN").and() 
      .httpBasic().realmName(REALM).authenticationEntryPoint(getBasicAuthEntryPoint()).and() 
      .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS); 

    } 

    @Bean 
    public CustomBasicAuthenticationEntryPoint getBasicAuthEntryPoint(){ 
     return new CustomBasicAuthenticationEntryPoint(); 
    } 
} 

Spring Конфигурационный файл

<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context 
     http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"> 

    <mvc:annotation-driven /> 
    <context:component-scan base-package="es.ieci.test.security, es.ieci.test.controller, es.ieci.test.services, es.ieci.test.utils" />    

</beans> 

web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
    id="WebApp_ID" version="2.5"> 
    <display-name>TestRestSpring</display-name> 

    <servlet> 
     <servlet-name>springrest</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>springrest</servlet-name> 
     <url-pattern>/services/*</url-pattern> 
    </servlet-mapping>  

</web-app> 

И мой файл ПОМ

<dependencies> 

     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>javax.servlet-api</artifactId> 
      <version>3.1.0</version> 
     </dependency> 


     <dependency> 
      <groupId>org.springframework.security</groupId> 
      <artifactId>spring-security-config</artifactId> 
      <version>4.2.0.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.security</groupId> 
      <artifactId>spring-security-web</artifactId> 
      <version>4.2.0.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-core</artifactId> 
      <version>4.3.3.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-webmvc</artifactId> 
      <version>4.3.3.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>com.fasterxml.jackson.core</groupId> 
      <artifactId>jackson-databind</artifactId> 
      <version>2.4.1</version> 
     </dependency> 

     <dependency> 
      <groupId>org.apache.logging.log4j</groupId> 
      <artifactId>log4j-core</artifactId> 
      <version>2.7</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.logging.log4j</groupId> 
      <artifactId>log4j-web</artifactId> 
      <version>2.7</version> 
      <scope>runtime</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.logging.log4j</groupId> 
      <artifactId>log4j-slf4j-impl</artifactId> 
      <version>2.7</version> 
     </dependency> 

     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>4.11</version> 
      <scope>test</scope> 
     </dependency> 
    </dependencies> 

Я использую v6.0m Tomcat и журналы сервера выглядит хорошо:

17 ноября, 2016 2:00:32 PM org.springframework.security.web.DefaultSecurityFilterChain Informacion: Создание фильтра цепи: [email protected]1, [org.springframework.secu [email protected]f671723, org.spring[email protected]2b8af779, [email protected]86, org.springframework.security .web.authentication.logout.LogoutFilter @ 6f7b847c, org.springfram[email protected]3b022cae, org.sp[email protected]1eebd4a2, org.springframework.security. [email protected], org.springfram[email protected]392002bb, o[email protected]e13b2fb, org[email protected]6b4187ba, org.springfr[email protected]241377b6]

Но если я позвоню в

http://localhost:8383/TestRestSpring/services/echo

без предоставления учетных данных пользователя ответа сервера 200 вместо ожидаемой ошибки Auth

ответ

0

я был в состоянии получить 401 код добавления фильтра в web.xml

<filter> 
     <filter-name>springSecurityFilterChain</filter-name> 
     <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 
    </filter> 

    <filter-mapping> 
     <filter-name>springSecurityFilterChain</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 

Но я не уверен, что это правильный путь.

-1

Кажется, вы пропустили добавить файл контекстной конфигурации в свой web.xml, поэтому проверка компонентов конфигурации безопасности не выполняется.

<context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>/WEB-INF/spring-dispatcher-servlet.xml</param-value> 
</context-param> 
<listener> 
     <listener-class> 
       org.springframework.web.context.ContextLoaderListener 
     </listener-class> 
</listener> 
Смежные вопросы