Сбой безопасности Spring при развертывании на Linux-сервере

#java #linux #spring #spring-mvc #spring-security

#java #linux #spring #spring-mvc #spring-безопасность

Вопрос:

мы столкнулись с проблемой с веб-сервисом Spring. Мы используем Spring Security для защиты нашего серверной части администратора для генерации ключей api. Когда мы развертываем его на наших локальных компьютерах (Windows и macOS), он работает нормально, и страница загружается. Если мы попытаемся развернуть его на виртуальной машине с Debian или Ubuntu, незащищенные конечные точки загружаются нормально, но как только мы попадаем на серверную часть администратора, сервер блокируется и не загружает страницу. Мы пытались развернуть его с помощью начальной загрузки задачи gradle из репозитория git, скомпилировать war и загрузить его в экземпляр tomcat, скомпилировать jar и запустить его, но ничего из этого не сработало. Мы не получаем никаких исключений в консоли, и, похоже, она работает нормально, однако после того, как мы попали в серверную часть, другие страницы также не загружаются, даже те, которые работали раньше.

Это конфигурация безопасности

 package me.probE466.config;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.*;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.*;


@EnableWebSecurity
@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
//        auth
//                .inMemoryAuthentication()
//                .withUser("user").password("password").roles("ADMIN");
    }

    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().ignoringAntMatchers("/post");
        http.authorizeRequests()
                .antMatchers("/admin/**")
                .authenticated()
                .antMatchers("/**").permitAll().and().httpBasic();
    }
}
  

Это контроллер

 @RequestMapping(value = "/admin", method = RequestMethod.GET)
    public ModelAndView getTest() {
        return new ModelAndView("addapi");
    }

    @RequestMapping(value = "/admin", method = RequestMethod.POST)
    public
    @ResponseBody
    String addApiKey(@RequestParam("userName") String userName) {
        User user = new User();
        String key = generateSecureApiKey(32);
        user.setUserKey(key);
        user.setUserName(userName);
        userRepository.save(user);
        return key;
    }
  

Это наш build.gradle

 buildscript {
    ext {
        springBootVersion = '1.4.1.RELEASE'
    }
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}

apply plugin: 'java'
apply plugin: 'spring-boot'

jar {
    baseName = 'push'
    version = '0.0.1-SNAPSHOT'
}
sourceCompatibility = 1.8
targetCompatibility = 1.8

repositories {
    mavenCentral()
}


dependencies {
    compile("mysql:mysql-connector-java:5.1.34")
    compile('org.springframework.boot:spring-boot-starter-data-jpa')
    compile('org.thymeleaf:thymeleaf-spring4')
    compile('org.springframework.boot:spring-boot-starter-security')
    compile('org.springframework.boot:spring-boot-starter-web')
    // https://mvnrepository.com/artifact/commons-lang/commons-lang
    compile group: 'commons-lang', name: 'commons-lang', version: '2.6'



    testCompile('org.springframework.boot:spring-boot-starter-test')
}
  

Любая помощь будет оценена

Ответ №1:

Хорошо, мы разобрались…:

В начале работы Spring security (следовало бы прочитать это более внимательно) говорится:

 package hello;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

@Configuration
public class MvcConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/home").setViewName("home");
        registry.addViewController("/").setViewName("home");
        registry.addViewController("/hello").setViewName("hello");
        registry.addViewController("/login").setViewName("login");
    }

}
  

Это отсутствовало в нашей конфигурации. До сих пор не знаю, почему это сработало на нашем клиенте (он по-прежнему работает без него на них), но не на linux box, но после того, как мы добавили его, он там тоже работал нормально. Для дальнейшего использования: каждый защищенный контроллер ДОЛЖЕН быть зарегистрирован здесь … по крайней мере, на нашем сервере