gpt4 book ai didi

spring - 如何使用 Spring Boot Thymeleaf 显示当前登录的用户?

转载 作者:行者123 更新时间:2023-12-02 09:34:04 31 4
gpt4 key购买 nike

我正在尝试显示当前用户的详细信息,但我不断收到错误。我尝试从模板访问经过身份验证的用户,但这不起作用,因为我收到此错误:

在 org.springframework.security.core.userdetails.User 类型上找不到方法 getFirstName()

我试图从 Controller 获取信息,然后将其保存在字符串中并将该字符串传递给模板,但这也不起作用。

这是我的 SecurityConfig 类:

    @Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {

@Autowired
private UserService userService;

@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers(
"/registration",
"/js/**",
"/css/**",
"/img/**",
"/webjars/**").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.permitAll()
.and()
.logout()
.invalidateHttpSession(true)
.clearAuthentication(true)
.logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
.logoutSuccessUrl("/login?logout")
.permitAll();
}

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

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

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

}

这是我的 UserService 类:

 public interface UserService extends UserDetailsService {

User findByEmailAddress(String emailAddress);
// User findByFirstName(String firstName);

User save(UserRegistrationDto registration);
}

这是我的 UserServiceImpl 类:

 @Service
public class UserServiceImpl implements UserService {

@Autowired
private UserRepository userRepository;

@Autowired
private BCryptPasswordEncoder passwordEncoder;

@Override
public UserDetails loadUserByUsername(String emailAddress) throws
UsernameNotFoundException {
User user = userRepository.findByEmailAddress(emailAddress);
if (user == null){
throw new UsernameNotFoundException("Invalid username or
password.");
}
return new
org.springframework.security.core.userdetails.User(user.getEmailAddress(),
user.getPassword(),
mapRolesToAuthorities(user.getRoles()));
}

public User findByEmailAddress(String emailAddress){
return userRepository.findByEmailAddress(emailAddress);
}

public User save(UserRegistrationDto registration){
User user = new User();
user.setFirstName(registration.getFirstName());
user.setSurname(registration.getSurname());
user.setEmailAddress(registration.getEmailAddress());
user.setPassword(passwordEncoder.encode(registration.getPassword()));
user.setRoles(Arrays.asList(new Role("ROLE_USER")));
return userRepository.save(user);
}

private Collection<? extends GrantedAuthority>
mapRolesToAuthorities(Collection<Role> roles){
return roles.stream()
.map(role -> new SimpleGrantedAuthority(role.getName()))
.collect(Collectors.toList());
}


}

这是模板类中的一些代码,我试图在其中获取信息:

th:text ="${#authentication.getPrincipal().getFirstName()}">

th:text ="${#authentication.getPrincipal().getUser().getFirstName()}">

这是登录 Controller 。我注释掉的部分是我尝试获取当前用户详细信息的另一种方式:

@Controller
//@RequestMapping("/login")
public class MainController {

// @GetMapping("/")
// public String root() {
// return "userProfile1";
// }

@GetMapping("/login")
public String login(Model model) {
return "login";

}

// @GetMapping
// public String displayUserAccount(@ModelAttribute("user") @Valid
UserRegistrationDto userDto, BindingResult result, Model model) {
//
//
// model.addAttribute("firstName", ((UserRegistrationDto)
auth).getEmailAddress());
//
// model.addAttribute("emailAddress", userDto.getEmailAddress());
// model.addAttribute("firstName", userDto.getFirstName());
// model.addAttribute("surname", userDto.getSurname());
// model.addAttribute("age", userDto.getAge());
// model.addAttribute("gender", userDto.getGender());
// model.addAttribute("dob", userDto.getDob());
// // return "redirect:/registration?success";
// return "userProfile1";
//
// }

@ResponseBody
public String currentUserName(Authentication auth) {
((UserRegistrationDto) auth).getEmailAddress();
return "userProfile1";


}


}

这都是我很抱歉的地方!非常感谢任何提供帮助的人:D

最佳答案

您可以使用 Thymeleaf extras 来显示经过身份验证的用户详细信息。

Thymeleaf Extras Springsecurity4

    <div th:text="${#authentication.name} ></div>

关于spring - 如何使用 Spring Boot Thymeleaf 显示当前登录的用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48358478/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com