Spring Security не будет аутентифицировать вновь созданные пользователи и бросить Noresultexception, несмотря на то, чтоJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Spring Security не будет аутентифицировать вновь созданные пользователи и бросить Noresultexception, несмотря на то, что

Сообщение Anonymous »

Код для всего проекта можно найти @ https://github.com/dcechano/universitymanagmentsystem
Я использую Spring Security 5 и Spring MVC Project, поддержанный Custom Dao Authentication . Организации - это человек , студент и несколько других, которые здесь не имеют отношения. Эти объекты инициализируются с использованием сценариев SQL и входа в систему с помощью Spring Security с использованием этих инициализированных сущностей сценария работают нормально.
Однако я добавил функциональность, чтобы сохранить новый студент и сохранить его в базе данных H2. Когда я сохраняю их в базе данных, а затем возвращаюсь и пытаюсь войти в систему, используя этот недавно созданный студент (и person по наследству) Spring Security отказывается от аутентификации. Используя отладчик, я обнаружил, что внутренне бросает javax.persistence.noresultfoundexception с сообщением No Entity, найденной для запроса . Но я подтвердил в нескольких точках, что новая сущность действительно существует в базе данных. Ниже приведен мой класс конфигурации Spring Security и некоторые скриншоты меня воспроизводят проблему и некоторые результаты при запуске отладчика. < /P>

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

SecurityConfig.java

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

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

private PersonService personService;

private CustomAuthentication customAuthentication;

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.authenticationProvider(authenticationProvider());
}

@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("/resources/**",
"/static/**");
}

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

http.authorizeRequests()
.antMatchers("/*").hasAnyRole("STUDENT", "FACULTY_MEMBER", "STAFF_MEMBER")
.and()
.formLogin()
.loginPage("/login")
.loginProcessingUrl("/userAuth")
.successHandler(customAuthentication)
.permitAll()
.and()
.logout()
.logoutUrl("/logout")
.permitAll();

}

@Bean
public CsrfTokenRepository repo() {
HttpSessionCsrfTokenRepository repo = new HttpSessionCsrfTokenRepository();
repo.setParameterName("_csrf");
repo.setHeaderName("X-CSRF-TOKEN");
return repo;
}

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

@Bean
public DaoAuthenticationProvider authenticationProvider() {
DaoAuthenticationProvider auth = new DaoAuthenticationProvider();
auth.setUserDetailsService(personService);
auth.setPasswordEncoder(passwordEncoder());
return auth;
}

@Autowired
public void setPersonService(PersonService personService) {
this.personService = personService;
}

@Autowired
public void setCustomAuthentication(CustomAuthentication customAuthentication) {
this.customAuthentication = customAuthentication;
}
my userdetailsservice реализация. (

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

PersonRepo
Extends userDetailsService )

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

@Service
public class PersonServiceImpl implements PersonService {

private PasswordEncoder passwordEncoder;

private PersonRepo personRepo;

@Override
public Person findByUsername(String username) {
return personRepo.findByUsername(username);
}

@Override
public void save(Person person) {
personRepo.save(person);
}

@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
Logger logger = Logger.getLogger(getClass().toString());
logger.info("Inside the loadUserByUsername method");
Person person = this.findByUsername(username);
if (person == null) {
logger.info("Person with username: " + username + " was not found!");
throw new UsernameNotFoundException("Could not find Person with username " + username);
}
logger.info("User was successfully retrieved from database");
Collection grantedAuthorityRoles = person.getRoles().stream().map(
role -> new SimpleGrantedAuthority(role.getRole().name())).collect(Collectors.toList());

return new User(person.getUsername(), person.getPassword(), grantedAuthorityRoles);
}

@Autowired
public void setPasswordEncoder(PasswordEncoder passwordEncoder) {
this.passwordEncoder = passwordEncoder;
}

@Autowired
public void setPersonRepo(PersonRepo personRepo) {
this.personRepo = personRepo;
}
}
Отображение MVC, в котором хранится недавно созданный студент в базе данных. Обратите внимание на операторы журнала. < /P>

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

@PostMapping("/save_student")
public String saveStudent(@ModelAttribute("student") Student student) {
student.setUsername(student.getFirstName().charAt(0) + student.getLastName().toLowerCase());
student.setPassword(passwordEncoder.encode(student.getPassword()));
student.setRoles(List.of(roleRepo.getRoleByName(RoleEnum.ROLE_STUDENT.name())));
student.setVersion(1);
studentRepo.save(student);
if (personService.loadUserByUsername(student.getUsername()) == null) {
throw new EntityNotFoundException();
} else {
logger.info("Person with username " + student.getUsername() + " was indeed found.");
}
return "redirect:list_students";
}

@GetMapping("/list_students")
public String listStudents(Model model) {
model.addAttribute("students", studentRepo.findAll());
model.addAttribute("people", personRepo.findAll());
return "all_students";
}
< /code>
Эти скриншоты пытаются продемонстрировать ошибку. После того, как я нажимаю кнопку «Регистрация», она запускает @postmapping ("/save_student") 
выше, где новый объект «Code>» содержит новый студент , затем перенаправляется на страницу, на которой отображается все лица s в базе данных. НЕ новый человек перечислен. Сохраняется.

результат после перенаправления через @getmaping (/list_students). Обратите внимание, что «Стив Миллер» перечислен. Точка разрыва - это место в методе LograSerByuserName () из userDetailSservice реализации.

ed extrace extrace Весь журналы сервера. />https://github.com/dcechano/universitym ... ktrace.txt

Подробнее здесь: https://stackoverflow.com/questions/639 ... oresultexc
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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