Spring MVC (5.0.8) с Spring Security (5.0.7) Базовая аутентификация не работает - PullRequest
0 голосов
/ 03 сентября 2018

Я пытаюсь включить Spring Security в моем приложении Spring MVC, которое обслуживает некоторые веб-службы REST (Java 8). Проблема в том, что я делаю, но аутентификация просто не работает вообще. Я могу получить доступ к своим конечным точкам REST без каких-либо учетных данных. Я использую это руководство: https://docs.spring.io/spring-security/site/docs/5.0.7.RELEASE/reference/htmlsingle/

Репозиторий Git с полным кодом моего приложения находится здесь: https://github.com/SP8EBC/MKS_JG_ONLINE

SecurityConfig.java выглядит следующим образом

@EnableWebSecurity
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication()                 
            .withUser(Secret.user).password("{noop}" + Secret.password).roles("USER");       
    }
    @Override
    protected void configure(HttpSecurity http) throws Exception {
//         http
//           .csrf()
//               .disable()
//           .authorizeRequests().antMatchers("/**").permitAll()
//               .anyRequest().authenticated()
//           .and()
//           .httpBasic()
//               .realmName("test")
//               .authenticationEntryPoint(new CustomAuthenticationEntryPoint());
        http.authorizeRequests().anyRequest().denyAll();
    }
}

AppConfig.java

@Configuration
@Import(SecurityConfig.class)
@EnableWebMvc
@EnableSpringDataWebSupport
@EnableTransactionManagement
@EnableJpaRepositories(basePackages = {"pl.jeleniagora.mks.dao.repository"})
@ComponentScan("pl.jeleniagora.mks")
public class AppConfig{
// beans and app config
}

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>MKS_JG_ONLINE</display-name>
    <context-param>
      <param-name>contextClass</param-name>
      <param-value>
         org.springframework.web.context.support.AnnotationConfigWebApplicationContext
      </param-value>
   </context-param>
   <context-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>pl.jeleniagora.mks.ws.config</param-value>
   </context-param>
   <listener>
      <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
   </listener>

   <servlet>
      <servlet-name>rest</servlet-name>
      <servlet-class>
         org.springframework.web.servlet.DispatcherServlet
      </servlet-class>
      <init-param>
         <param-name>contextClass</param-name>
         <param-value>
            org.springframework.web.context.support.AnnotationConfigWebApplicationContext
         </param-value>
      </init-param>
      <init-param>
         <param-name>contextConfigLocation</param-name>
         <param-value>pl.jeleniagora.mks.ws.controllers</param-value>
      </init-param>
      <load-on-startup>1</load-on-startup>
   </servlet>
   <servlet-mapping>
      <servlet-name>rest</servlet-name>
      <url-pattern>/*</url-pattern>
   </servlet-mapping>

   <welcome-file-list>
      <welcome-file />
   </welcome-file-list>

</web-app>

Когда я запускаю Tomcat 8.5 в режиме отладки, я вижу, что SecurityConfig загружается (выполнение останавливается на точке останова в configure и configureGlobal). Что я делаю не так?

1 Ответ

0 голосов
/ 04 сентября 2018

Spring Security требует, чтобы рядом с конфигурацией безопасности был зарегистрирован фильтр сервлета.

Добавьте следующее к вашему 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>

Это добавит фильтр и будет применяться ко всем запросам.

Однако, поскольку вы используете недавний контейнер сервлетов, я бы посоветовал отказаться от web.xml и создать 2 java-класса для начальной загрузки. (См. Также здесь ).

Первая загрузка вашего приложения

public class MvcWebApplicationInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

    @Override
    public Class<?>[] getServletConfigClasses() {
      return new Class[] { WebConfig.class }; // or whatever it is called or return `null`
    }

    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[] { AppConfig.class };
    }
}

Затем добавьте тот, который загружает / настраивает Spring Security filter

public class SecurityWebApplicationInitializer extends AbstractSecurityWebApplicationInitializer { }

Теперь все настроено на Java, и вы можете обойтись без web.xml.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...