টমক্যাট দিয়ে স্প্রিং বুট শুরু করার সময় ব্যবহারকারীর নাম এবং পাসওয়ার্ড কী?


147

যখন আমি স্প্রিং বুট এবং অ্যাক্সেসের মাধ্যমে আমার স্প্রিং অ্যাপ্লিকেশন স্থাপন করি তখন আমাকে localhost:8080প্রমাণীকরণ করতে হয়, তবে ব্যবহারকারীর নাম এবং পাসওয়ার্ড কী বা আমি কীভাবে সেট করতে পারি? আমি tomcat-usersএটিকে আমার ফাইলে যুক্ত করার চেষ্টা করেছি কিন্তু এটি কার্যকর হয়নি:

<role rolename="manager-gui"/>
    <user username="admin" password="admin" roles="manager-gui"/>

এটি প্রয়োগের শুরুর পয়েন্ট:

@SpringBootApplication
public class Application extends SpringBootServletInitializer {

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

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(Application.class);
    }
}

এবং এটি টমক্যাট নির্ভরতা:

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

আমি কীভাবে প্রমাণীকরণ করব localhost:8080?



আপনার প্রমাণীকরণ প্রয়োজন = আপনার প্রমাণীকরণ থাকতে চান? কারণ বসন্ত-বুট-স্টার্টার-টমক্যাট /-ওয়েবে কোনও প্রমাণীকরণ বা ব্যবহারকারীর নাম এবং পাসওয়ার্ড নেই। আপনি যদি কিছু দেখতে পান তবে এটি সম্ভবত একটি আলাদা অ্যাপ্লিকেশন: 8080
জ্যাপল

2
এবং এটি প্রবর্তনে কনসোলে মুদ্রিত।
ক্রাইলিস -কোটিরিওপটিস্টিস্টিক-

উত্তর:


297

আমি মনে করি আপনার ক্লাসের পথে স্প্রিং সিকিউরিটি রয়েছে এবং তারপরে স্প্রিং সিকিউরিটি স্বয়ংক্রিয়ভাবে একটি ডিফল্ট ব্যবহারকারী এবং উত্পন্ন পাসওয়ার্ড দিয়ে কনফিগার করা আছে

দয়া করে এর জন্য আপনার pom.xML ফাইলটি দেখুন:

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

আপনার পোমে যদি এটির চেয়ে আপনার কাছে লগ কনসোল বার্তা থাকা উচিত:

Using default security password: ce6c3d39-8f20-4a41-8e01-803166bb99b6

এবং ব্রাউজার প্রম্পটে আপনি userকনসোলে মুদ্রিত ব্যবহারকারী এবং পাসওয়ার্ডটি আমদানি করবেন ।

বা আপনি যদি বসন্তের সুরক্ষাটি কনফিগার করতে চান তবে আপনি স্প্রিং বুট সুরক্ষিত উদাহরণটি একবার দেখে নিতে পারেন

এটা বসন্ত বুট ব্যাখ্যা করা হয় রেফারেন্স ডকুমেন্টেশন মধ্যে নিরাপত্তা অধ্যায়, এটা নির্দেশ করে:

The default AuthenticationManager has a single user (‘user username and random password, printed at `INFO` level when the application starts up)

Using default security password: 78fa095d-3f4c-48b1-ad50-e24c31d5cf35

23
যদি আপনি আপনার লগিং কনফিগারেশন টিউন করেন, তবে org.springframework.boot.autoconfigure.securityবিভাগটি INFO বার্তাগুলি লগ করতে সেট করা আছে তা নিশ্চিত করুন, অন্যথায় ডিফল্ট পাসওয়ার্ড মুদ্রণ করা হবে না।
জিশান

সুন্দর। কিছু কিছু ডিফল্ট। ডবল নিরাপদ্ তলোয়ার.
শচীন শর্মা

1
আমার ক্ষেত্রে (বসন্ত বুট বনাম: 2.0.4) কনসোলটি "উত্পন্ন সুরক্ষা পাসওয়ার্ড ব্যবহার করছে: eb7a9e02-b9cc-484d-9dec-a295b96d94ee"
আমির

এটি আমার ক্ষেত্রেও ছিল। আমি এই সম্পর্কে প্রশ্ন জিজ্ঞাসা শুরু করতে চলেছিলাম।
দিমিত্রি রাইবিন

@ মার্সেল আমি ক্লাসের পথে বসন্তের সুরক্ষা যুক্ত করেছি এবং উত্পন্ন পাসওয়ার্ডটি দেখতে পাচ্ছি, তবে আমি পোস্টম্যানের মাধ্যমে যখন ব্যবহারকারী হিসাবে ব্যবহারকারীর নাম এবং পাসওয়ার্ড হিসাবে উত্পন্ন পাসওয়ার্ড হিসাবে মৌলিক লেখায় ব্যবহার করি। আমি অননুমোদিত হয়ে যাচ্ছি।
লোকেশ পান্ডে

50

যদি spring-securityবয়াম ক্লাসপাথ যোগ করা হয় যদি তা না হয় spring-bootঅ্যাপ্লিকেশান সব HTTP এন্ড পয়েন্ট ডিফল্ট নিরাপত্তা কনফিগারেশন বর্গ দ্বারা সুরক্ষিত করা হবেSecurityAutoConfiguration

এটি ব্রাউজারের শংসাপত্রগুলির জন্য জিজ্ঞাসা করতে পপ-আপের কারণ ঘটায়।

প্রতিটি অ্যাপ্লিকেশনটির জন্য পাসওয়ার্ড পরিবর্তিত হয় এবং কনসোলটিতে এটি পাওয়া যায়।

Using default security password: 78fa095d-3f4c-48b1-ad50-e24c31d5cf35

ডিফল্টগুলির সামনে আপনার নিজের নিজের অ্যাপ্লিকেশন সুরক্ষা স্তর যুক্ত করতে,

@EnableWebSecurity
public class SecurityConfig {

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

অথবা আপনি যদি কেবল পাসওয়ার্ড পরিবর্তন করতে চান তবে আপনি ডিফল্টর সাথে ওভাররাইড করতে পারেন,

application.xml

security.user.password = new_password

অথবা

application.properties

spring.security.user.name=<>
spring.security.user.password=<>

আমি স্রেফ স্প্রিং.সিকিউরিটি.ইউজার.নেম = <> স্প্রিং.সিকিউরিটি.উসার.পাসওয়ার্ড = <> অ্যাপ্লিকেশন.প্রপার্টি ফাইলটিতে যুক্ত করেছি। আমি আর কিছু করিনি। এখনও এটি কাজ করে।
বরানী আর

Xml উদাহরণে আপনার সম্পত্তিটির নাম ভুল আছে এটি স্প্রিং.সিকিউরিটি.উসার.পাসওয়ার্ড = এক্সএক্সএক্স XML ফর্ম্যাটিং সম্পর্কে নিশ্চিত নয় যেহেতু আমরা .ml ফাইলগুলি ব্যবহার করি
ডেভিডফ্রান্সিস

যখন ব্যবহার inMemoryAuthenticationআপনি বরং মাধ্যমে আপনার পাসওয়ার্ডের উপসর্গে {noop} যখন আপনি ত্রুটিটি পান:There is no PasswordEncoder mapped for the id “null”
মার্টিন ভ্যান Wingerden

এটিকে সিকিউরিটি কনফিগ ক্লাসে যোগ করুন @ বিয়ান পাবলিক পাসওয়ার্ডইনকডার পাসওয়ার্ড এনকোডার () No NoOpPasswordEncoder.getInstance () ফেরান; } এটি ঠিক করতে পারে "নাল"
আইডিটির

9

ওভাররাইড করার সময়

spring.security.user.name=
spring.security.user.password=

মধ্যে application.properties , আপনি প্রয়োজন হবে না "প্রায় "username", শুধু ব্যবহার username। আর একটি বিষয়, কাঁচা পাসওয়ার্ড সংরক্ষণ করার পরিবর্তে , এটি Bcrypt / scrypt এর সাহায্যে এনক্রিপ্ট করুন এবং এটি পছন্দ করুন

spring.security.user.password={bcrypt}encryptedPassword

3

আপনি যদি ডিফল্ট উত্তরটিকে নির্দেশ করে এমন অন্যান্য উত্তরের ভিত্তিতে পাসওয়ার্ডটি খুঁজে না পান তবে সাম্প্রতিক সংস্করণগুলিতে লগ বার্তা শব্দের সাথে পরিবর্তিত হয়েছে

Using generated security password: <some UUID>

2

আপনি ব্যবহারকারীর শংসাপত্রগুলির জন্য জিজ্ঞাসা করতে পারেন এবং সার্ভারটি শুরু হওয়ার পরে এগুলি গতিশীলভাবে সেট করতে পারেন (গ্রাহকের পরিবেশে সমাধানটি প্রকাশ করার সময় খুব কার্যকর):

@EnableWebSecurity
public class SecurityConfig {

    private static final Logger log = LogManager.getLogger();

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        log.info("Setting in-memory security using the user input...");

        Scanner scanner = new Scanner(System.in);
        String inputUser = null;
        String inputPassword = null;
        System.out.println("\nPlease set the admin credentials for this web application");
        while (true) {
            System.out.print("user: ");
            inputUser = scanner.nextLine();
            System.out.print("password: ");
            inputPassword = scanner.nextLine();
            System.out.print("confirm password: ");
            String inputPasswordConfirm = scanner.nextLine();

            if (inputUser.isEmpty()) {
                System.out.println("Error: user must be set - please try again");
            } else if (inputPassword.isEmpty()) {
                System.out.println("Error: password must be set - please try again");
            } else if (!inputPassword.equals(inputPasswordConfirm)) {
                System.out.println("Error: password and password confirm do not match - please try again");
            } else {
                log.info("Setting the in-memory security using the provided credentials...");
                break;
            }
            System.out.println("");
        }
        scanner.close();

        if (inputUser != null && inputPassword != null) {
             auth.inMemoryAuthentication()
                .withUser(inputUser)
                .password(inputPassword)
                .roles("USER");
        }
    }
}

(মে 2018) একটি আপডেট - এটি বসন্ত বুট ২.x এ কাজ করবে:

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    private static final Logger log = LogManager.getLogger();

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        // Note: 
        // Use this to enable the tomcat basic authentication (tomcat popup rather than spring login page)
        // Note that the CSRf token is disabled for all requests
        log.info("Disabling CSRF, enabling basic authentication...");
        http
        .authorizeRequests()
            .antMatchers("/**").authenticated() // These urls are allowed by any authenticated user
        .and()
            .httpBasic();
        http.csrf().disable();
    }

    @Bean
    public UserDetailsService userDetailsService() {
        log.info("Setting in-memory security using the user input...");

        String username = null;
        String password = null;

        System.out.println("\nPlease set the admin credentials for this web application (will be required when browsing to the web application)");
        Console console = System.console();

        // Read the credentials from the user console: 
        // Note: 
        // Console supports password masking, but is not supported in IDEs such as eclipse; 
        // thus if in IDE (where console == null) use scanner instead:
        if (console == null) {
            // Use scanner:
            Scanner scanner = new Scanner(System.in);
            while (true) {
                System.out.print("Username: ");
                username = scanner.nextLine();
                System.out.print("Password: ");
                password = scanner.nextLine();
                System.out.print("Confirm Password: ");
                String inputPasswordConfirm = scanner.nextLine();

                if (username.isEmpty()) {
                    System.out.println("Error: user must be set - please try again");
                } else if (password.isEmpty()) {
                    System.out.println("Error: password must be set - please try again");
                } else if (!password.equals(inputPasswordConfirm)) {
                    System.out.println("Error: password and password confirm do not match - please try again");
                } else {
                    log.info("Setting the in-memory security using the provided credentials...");
                    break;
                }
                System.out.println("");
            }
            scanner.close();
        } else {
            // Use Console
            while (true) {
                username = console.readLine("Username: ");
                char[] passwordChars = console.readPassword("Password: ");
                password = String.valueOf(passwordChars);
                char[] passwordConfirmChars = console.readPassword("Confirm Password: ");
                String passwordConfirm = String.valueOf(passwordConfirmChars);

                if (username.isEmpty()) {
                    System.out.println("Error: Username must be set - please try again");
                } else if (password.isEmpty()) {
                    System.out.println("Error: Password must be set - please try again");
                } else if (!password.equals(passwordConfirm)) {
                    System.out.println("Error: Password and Password Confirm do not match - please try again");
                } else {
                    log.info("Setting the in-memory security using the provided credentials...");
                    break;
                }
                System.out.println("");
            }
        }

        // Set the inMemoryAuthentication object with the given credentials:
        InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();
        if (username != null && password != null) {
            String encodedPassword = passwordEncoder().encode(password);
            manager.createUser(User.withUsername(username).password(encodedPassword).roles("USER").build());
        }
        return manager;
    }

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
}

2

গৃহীত উত্তরের সাথে যুক্ত -

যদি লগগুলিতে পাসওয়ার্ড না দেখা যায় তবে "org.springframework.boot.autoconfigure.security" লগগুলি সক্ষম করুন।

আপনি যদি আপনার লগিং কনফিগারেশনটিকে সূক্ষ্ম সুরে রাখেন তবে নিশ্চিত করুন যে org.springframework.boot.autoconfigure.sec সুরক্ষা বিভাগটি INFO বার্তাগুলি লগ করতে সেট করা আছে, অন্যথায় ডিফল্ট পাসওয়ার্ড মুদ্রণ করা হবে না।

https://docs.spring.io/spring-boot/docs/1.4.0.RELEASE/reference/htmlsingle/#boot-features-security


0

যখন আমি স্প্রিং সিকিউরিটি শিখতে শুরু করি, তখন আমি নীচে কোড স্নিপেটের মতো পদ্ধতিতে ব্যবহারকারীর বিবরণ পরিষেবাগুলি ()টিকে ওভাররাইড করেছিলাম :

@Configuration
@EnableWebSecurity
public class ApplicationSecurityConfiguration extends WebSecurityConfigurerAdapter{

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .csrf().disable()
                .authorizeRequests()
                .antMatchers("/", "/index").permitAll()
                .anyRequest().authenticated()
                .and()
                .httpBasic();
    }

    @Override
    @Bean
    public UserDetailsService userDetailsService() {
        List<UserDetails> users= new ArrayList<UserDetails>();
        users.add(User.withDefaultPasswordEncoder().username("admin").password("nimda").roles("USER","ADMIN").build());
        users.add(User.withDefaultPasswordEncoder().username("Spring").password("Security").roles("USER").build());
        return new InMemoryUserDetailsManager(users);
    }
}

সুতরাং আমরা উল্লিখিত ক্রেডিটগুলি ব্যবহার করে অ্যাপ্লিকেশনটিতে লগ ইন করতে পারি। (যেমন অ্যাডমিন / নিমদা)

দ্রষ্টব্য: এটি আমাদের উত্পাদন ব্যবহার করা উচিত নয়।


0

আপনার প্রকল্পে কোড স্নিপেটের নীচে থেকে ব্যবহারকারীর নাম এবং পাসওয়ার্ড নেওয়ার চেষ্টা করুন এবং লগইন করুন এবং আশা করি এটি কার্যকর হবে।

@Override
    @Bean
    public UserDetailsService userDetailsService() {
        List<UserDetails> users= new ArrayList<UserDetails>();
        users.add(User.withDefaultPasswordEncoder().username("admin").password("admin").roles("USER","ADMIN").build());
        users.add(User.withDefaultPasswordEncoder().username("spring").password("spring").roles("USER").build());
        return new UserDetailsManager(users);
    }
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.