Приложение Spring Boot перенаправляет /login при каждом запросеJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Приложение Spring Boot перенаправляет /login при каждом запросе

Сообщение Anonymous »

Я работаю над приложением Spring Boot для управления медицинским оборудованием и компаниями. Я создал базовую структуру с помощью SearchController, который обрабатывает поисковые запросы. Однако всякий раз, когда я пытаюсь получить доступ к конечной точке поиска (например, http://localhost:8080/search?q=Company), я сталкиваюсь с циклом перенаправления, который в конечном итоге приводит к странице с ошибкой.
Соответствующий код
SearchController.java

Код: Выделить всё

package com.example.medicinska_oprema.controller;

import com.example.medicinska_oprema.model.Company;
import com.example.medicinska_oprema.model.Equipment;
import com.example.medicinska_oprema.service.CompanyService;
import com.example.medicinska_oprema.service.EquipmentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.ui.Model;

import java.util.List;

@Controller
public class SearchController {

@Autowired
private CompanyService companyService;

@Autowired
private EquipmentService equipmentService;

@GetMapping("/search")
public String search(@RequestParam("q") String query, Model model) {
List companies = companyService.searchCompanies(query);
List equipments = equipmentService.searchEquipment(query);
model.addAttribute("companies", companies);
model.addAttribute("equipments", equipments);
return "searchResults";
}
}
CompanyService.java

Код: Выделить всё

package com.example.medicinska_oprema.service;

import com.example.medicinska_oprema.model.Company;
import com.example.medicinska_oprema.repository.CompanyRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class CompanyService {

@Autowired
private CompanyRepository companyRepository;

public List searchCompanies(String keyword) {
return companyRepository.findByNameContainingIgnoreCase(keyword);
}
}

EquipmentService.java

Код: Выделить всё

package com.example.medicinska_oprema.service;

import com.example.medicinska_oprema.model.Equipment;
import com.example.medicinska_oprema.repository.EquipmentRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class EquipmentService {

@Autowired
private EquipmentRepository equipmentRepository;

public List searchEquipment(String keyword) {
return equipmentRepository.findByNameContainingIgnoreCase(keyword);
}
}

CompanyRepository.java

Код: Выделить всё

package com.example.medicinska_oprema.repository;

import com.example.medicinska_oprema.model.Company;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.List;

public interface CompanyRepository extends JpaRepository {
List findByNameContainingIgnoreCase(String keyword);
}

EquipmentRepository.java

Код: Выделить всё

package com.example.medicinska_oprema.repository;

import com.example.medicinska_oprema.model.Equipment;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.List;

public interface EquipmentRepository extends JpaRepository {
List  findByNameContainingIgnoreCase(String keyword);
}
SecurityConfig.java

Код: Выделить всё

package com.example.medicinska_oprema.security;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
import org.springframework.security.web.SecurityFilterChain;

@Configuration
@EnableWebSecurity
public class SecurityConfig {

@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests((requests) -> requests
.requestMatchers("/", "/home", "/search").permitAll()
.anyRequest().authenticated()
)
.formLogin((form) -> form
.loginPage("/login")
.permitAll()
)
.logout((logout) -> logout.permitAll());

return http.build();
}

@Bean
public UserDetailsService userDetailsService() {
UserDetails user =
User.withDefaultPasswordEncoder()
.username("user")
.password("password")
.roles("USER")
.build();

return new InMemoryUserDetailsManager(user);
}
}
Я ожидал увидеть страницу результатов поиска, на которой будут показаны компании и оборудование, соответствующие поисковому запросу. Вместо этого меня неоднократно перенаправляют на страницу /login, что приводит к ошибке «слишком много перенаправлений».
Я проверил конфигурацию безопасности и убедился, что конечная точка /search разрешена для всех пользователей, в том числе неаутентифицированных. Что может быть причиной этого цикла перенаправления и как его устранить?

Подробнее здесь: https://stackoverflow.com/questions/788 ... ry-request
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»