Невозможно переопределить базовую аутентификацию безопасности по умолчанию для остальных API-интерфейсов безопасности. - PullRequest
0 голосов
/ 29 мая 2018

Я новичок в среде Spring и пробовал свои силы в безопасности Spring, но я не могу выполнить базовую аутентификацию.Когда я добавляю Spring Security Starter к зависимостям Maven, я получаю базовую аутентификацию по умолчанию от Spring с user = user & password, генерируемым при запуске приложения.Пока это работает нормально.

Но теперь, даже если я добавил SecurityConfiguration, поведение по умолчанию не исчезает.Если я пытаюсь получить доступ к ресурсу с помощью моих новых учетных данных, я получаю сообщение Bad credentials.

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

Учебники со ссылками

  1. https://www.youtube.com/watch?v=rOnoKiH97Nc
  2. https://www.youtube.com/watch?v=kiIMCzEN3c0
  3. https://www.youtube.com/watch?v=3s2lSD50-JI

Project Structure

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.worldline.in</groupId>
    <artifactId>maven_springboot_rest</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>
    <name>maven_springboot_rest</name>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.1.RELEASE</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>com.jayway.jsonpath</groupId>
            <artifactId>json-path</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>

    </dependencies>


    <properties>
        <java.version>1.8</java.version>
    </properties>


    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

    <repositories>
        <repository>
            <id>spring-releases</id>
            <url>https://repo.spring.io/libs-release</url>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>spring-releases</id>
            <url>https://repo.spring.io/libs-release</url>
        </pluginRepository>
    </pluginRepositories>
</project>

Application.java

package com.worldline.rest;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration;

     // Tried component scan too ----- 
      //  https://stackoverflow.com/questions/38072517/unable-to-override-spring-boots-default-security-configuration       
         //@ComponentScan({"com.worldline.config"})

    //some stackoverflow links suggest to exclude it for default behavior to go away
        //@SpringBootApplication (exclude = {SecurityAutoConfiguration.class })

 @SpringBootApplication
 public class Application {

            public static void main(String[] args) {
                SpringApplication.run(Application.class, args);

            }

        }

Rest Controller

package com.worldline.rest;

import java.util.concurrent.atomic.AtomicLong;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import com.worldline.pojo.Greeting;


@RestController
public class GreetingController {

    private final AtomicLong counter = new AtomicLong();

    @RequestMapping("/greeting")
    public Greeting greeting(@RequestParam(value="name", defaultValue = "world") String name )
    {
        return new Greeting(counter.incrementAndGet(), name);
    }

}

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

package com.worldline.config;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
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 {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        /*http.authorizeRequests()
        .anyRequest()
        .fullyAuthenticated()
        .and().httpBasic();

        http.csrf().disable();*/


        http.authorizeRequests()
        .antMatchers("/greeting").hasRole("ADMIN");
    }

    /*@Override
    protected void configure(AuthenticationManagerBuilder auth)
            throws Exception {
        auth.inMemoryAuthentication().withUser("sunny").password("admin").roles("admin");
    }
*/

    @Autowired
    protected void configureGlobal(AuthenticationManagerBuilder auth) throws Exception
    {
        auth.inMemoryAuthentication().withUser("sunny").password("admin").roles("ADMIN");
    }

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