当前位置: 首页 > 知识库问答 >
问题:

如何在Spring Boot JPA中获取当前用户的对象

许俊贤
2023-03-14

我需要创建购物车。我有一个模型CartItem:

@Entity
@Table(name = "cart_items")
public class CartItem {
 @Id
 @GeneratedValue(strategy = GenerationType.IDENTITY)
 private int id;

 @ManyToOne
 @JoinColumn(name = "tour_id")
 private Tour tour;

 @ManyToOne
 @JoinColumn(name = "user_id")
 private User user;

 @Column(name = "order_date")
 private Date date=new Date();
 //getters and setters
}

模型用户:

package com.zaitsava.springboot_touristsite.entity;

import javax.persistence.*;
import java.util.Set;


@Entity
@Table(name = "user")
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    @Column(name = "firstname")
    private String firstname;

    @Column(name = "lastname")
    private String lastname;

    @Column(name = "patronymic")
    private String patronymic;

    @Column(name = "email")
    private String email;

    @Column(name = "phone")
    private String phone;

    @Column(name = "password")
    private String password;

    @Column(name = "active")
    private int active;

    @ManyToMany(cascade=CascadeType.ALL)
    @JoinTable(name="user_role", joinColumns=@JoinColumn(name="user_id"),
            inverseJoinColumns=@JoinColumn(name="role_id"))
    private Set<Role> roles;
    //gettes and setters
}

存储库:

public interface CartItemRepository extends JpaRepository<CartItem,Integer> {
    public List<CartItem> findByUser(User user);
}

@Service
public class ShoppingCartService {
    @Autowired
    private CartItemRepository cartItemRepository;

    public List<CartItem> cartItemList(User user){
        return cartItemRepository.findByUser(user);
    };}

现在我正在尝试获取用户并将其传递给查看:

 @GetMapping("/cart")
    public String showCart(Model model,@AuthenticationPrincipal User user){
        //User user = (User) auth.getPrincipal();  try 2
        //User user=(User) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); try 3
        if(user==null) System.out.println("User is null");

        List<CartItem> cartItemList=cartService.cartItemList(user);
        model.addAttribute("cartItems",cartItemList);
        return "user/cart";
    }

在第一种情况下,我得到空值,在情况2和3中:

JAVAlang.ClassCastException:类组织。springframework。安全果心用户详细信息。无法将用户强制转换为com类。扎伊萨瓦。springboot_旅游网站。实体用户(org.springframework.security.core.userdetails.User和com.zaitsava.springboot_touristsite.entity.User位于加载程序“app”的未命名模块中)-

我知道我应该注册AuthenticationPrincipalArgumentResolver,但如何在Spring Boot中注册呢?需要吗?

共有1个答案

岳硕
2023-03-14

通过此错误的外观,我看到您正在尝试将org.springframework.security.core.userdetails.User类强制转换为com.zaitsava.springboot_touristsite.entity.User。您可能需要像下面这样明确声明类:

User user=(org.springframework.security.core.userdetails.User) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
 类似资料:
  • 问题内容: 我正在使用Spring安全性版本3.1.4.RELEASE。如何访问当前登录的用户对象? 返回用户名,而不是用户对象。那么,如何使用返回的用户名并获得UserDetails对象? 我尝试了以下代码: 结果如下: AuthenticationFilter类如下: AuthenticationProvider如下: UserDetails类如下: 问题答案: 返回当前用户对象。可以是,也可

  • 我使用的是Spring security版本3.1.4.RELEASE,如何访问当前登录的用户对象? 返回用户名,而不是用户对象。那么如何使用返回的用户名并获取UserDetails对象呢? 我尝试了以下代码: 结果如下: AuthentiationFilter类如下: 身份验证提供程序,如下所示: 用户详细信息类如下所示:

  • 问题内容: 如何获得Oracle数据库的当前Connection对象?我在Spring 3.0.5中使用JDBC模块。 问题答案: 从bean中获取。 您可以通过使用Spring依赖项注入将数据源注入到bean中或通过静态访问来访问数据源:

  • 我们创建了一个java web应用程序,一旦用户访问我的网站,它必须将登录id作为他的windows凭据登录id,但在我的情况下,托管我的网站后,它每次都返回服务器管理用户作为windows登录id。在java web应用程序中有没有方法获取当前的windows用户id。 如果我打开我的网站,它必须显示我的名字,如果有些人打开了那个网站,它必须显示他的名字。 谢谢

  • 如何在MVC 5中获取当前登录用户的id?我尝试了StackOverflow建议,但它们似乎不适用于MVC 5 另外,MVC 5为用户分配资源的最佳实践是什么?(例如,