Исключение класса автоконфигурации дает ошибку 404 не найдено

Я использую безопасность Spring в своем приложении для шифрования пароля пользователя в базе данных. В связи с этим я получаю сообщение «Используя сгенерированный пароль безопасности: XXXXXX» в моем журнале загрузки Spring при запуске приложения. Я не хотел, чтобы этот пароль генерировался, поэтому я использую @SpringBootApplication (exclude = {SecurityAutoConfiguration.class}) в своем основном классе. Ниже мой основной класс

package com.example.policymanagementsystem;
import org.apache.catalina.webresources.TomcatURLStreamHandlerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;

@SpringBootApplication (exclude = {SecurityAutoConfiguration.class })
@ComponentScan( basePackages = {"com.example.policymanagementsystem.bean"})
public class PolicymanagementsystemApplication {

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

Таким образом, пароль не генерируется при запуске весеннего загрузочного приложения, но когда я нажимаю API от почтальона, он дает мне ошибку 404 Not found для всех других API. Мне не нужна аутентификация ни для одного из моих API, поэтому я указал ниже конфигурацию в классе SecurityConfiguration.

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

        http.cors().and().csrf().disable();
        http.authorizeRequests().antMatchers("/admin/**").permitAll().antMatchers("/user/**").permitAll().anyRequest().authenticated();
        
http.exceptionHandling()
        .authenticationEntryPoint(
            (request, response, ex) -> {
                response.sendError(
                    HttpServletResponse.SC_UNAUTHORIZED,
                    ex.getMessage()
                );
            }
        );
 http.addFilterBefore(jwtTokenFilter, UsernamePasswordAuthenticationFilter.class);
}

Пожалуйста, предложите мне какой-нибудь способ, чтобы я мог исключить SecurityAutoConfiguration.class и не получить ошибку 404, не найденную в моем ответе почтальона для любого API. Заранее спасибо!

У вас есть зависимость от привода в pom.xml?

Chetan Ahirrao 08.10.2022 09:47

нет, у меня нет зависимости от привода в pim.xml

Diptesh karle 08.10.2022 10:51

пожалуйста, не используйте пользовательскую безопасность и вместо этого реализуйте JWT, используя встроенные функции безопасности Spring thomasandolf.medium.com/…

Toerktumlare 08.10.2022 11:13
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
3
98
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Удалите исключающую часть из @SpringBootApplication и. Добавьте эти две строки в файл application.properties.

spring.security.user.name=abc
spring.security.user.password=xxx

Попробуйте этот код для SecurityConfiguration. и удалите .anyRequest().authenticated(); потому что вам это не нужно.

http
                .csrf().disable()
                .authorizeRequests()
                .antMatchers("/admin").hasAuthority("ADMIN")
//                .antMatchers("/post").authenticated()
                .antMatchers("/post","/deleteComment/**", "/deletePost/**", "/updateComment/**",
                        "/updateCommentPage/**", "/updatePostPage/**","/api/draft/**","/api/post/**").hasAnyAuthority("USER","ADMIN")
                .antMatchers("/","/api","/api/addComment/**","/api/viewPost/**").permitAll()
                .and().formLogin()
                .loginPage("/login").permitAll()
                .and().httpBasic().and()
                .logout().invalidateHttpSession(true)
                .clearAuthentication(true)
                .logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
                .logoutSuccessUrl("/logout-success").permitAll();

Я пробовал, как вы сказали. Но я получаю 401 неавторизованный для всех моих API, хотя я упомянул выше конфигурацию в своем классе SecurityConfiguration.

Diptesh karle 08.10.2022 09:15

Можете ли вы поделиться своим файлом конфигурации безопасности?

Janil101 08.10.2022 09:33

Не могу поделиться своим файлом SecurityConfiguration из-за политик stackoverflow (файл слишком длинный), но я расширяю класс WebSecurityConfigurerAdapter и переопределяю метод configure.

Diptesh karle 08.10.2022 10:58

хорошо, просто попробуйте удалить anyrequest().authenticated() и попробуйте реализовать код, подобный моему

Janil101 08.10.2022 11:51

чтобы обобщить проблему, когда я отключаю пружинную безопасность любым методом, либо используя аннотацию исключения в основном классе, либо, как упоминалось, вы добавляете несколько параметров в app.properties, я получаю 404 не найдено в ответе почтальона для всех API, и когда Я включаю весеннюю безопасность, она дает 401 несанкционированный ответ почтальону

Diptesh karle 08.10.2022 15:59

Также я сбит с толку, если 404 не найдено, которое я получаю, на самом деле потому, что я отключаю весеннюю безопасность !!

Diptesh karle 08.10.2022 19:25

Ваша установка на самом деле требует аутентификации - .anyRequest().authenticated(); Вы можете разрешить все для любого запроса, который должен это сделать.

http.authorizeRequests().anyRequest().permitAll();
Ответ принят как подходящий

Я нашел решение для этого, ошибка 404 не найдена была из-за того, что я не аннотировал поле в одном из классов моей модели с аннотацией @Id. Это решено сейчас.

Другие вопросы по теме