java - 每个用户在通过他/她的凭据登录时都有自己的列出的数据

标签 java hibernate spring-boot jsp

在我的项目中,有 N 个用户可用。每个用户都可以插入更新删除的数据列表。每个用户都有不同的不同数据。假设一个用户有 10 条记录,另一个用户有 20 条记录,第三个用户有 15 条记录,依此类推。

我尝试让多个用户可以注册并登录到我的应用程序,其中第一个用户帐户中的第一个用户已插入 10 条记录并显示,然后注销。我将再次使用不同的用户登录,然后将显示由前一个用户插入的相同数据。所以我的问题是如何用自己的帐户维护每个用户数据我是 spring-boot 与 hibernate、jsp 的初学者。

1.Usercontroller.java

package com.rajesh.controller;
import javax.servlet.http.HttpSession;
import javax.validation.Valid;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.rajesh.model.User;
import com.rajesh.service.UserService;

@Controller
public class UserController {
    private final Logger logger = LoggerFactory.getLogger(UserController.class);
    @Autowired
    private UserService userService;
    @GetMapping("/")
    public String Home(Model model) {
        return "home";
    }
    @PostMapping("/user/register")
    public String registerNewUser(ModelMap model, @ModelAttribute("userRegister")@Valid User user, BindingResult bindingResult) {

        User userExists = userService.findUserByEmail(user.getEmail());
        if (userExists != null) {
            bindingResult
                    .rejectValue("email", "error.user",
                            "There is already a user registered with the email provided");
            model.addAttribute("msgEmail", "your email is already registered");
            logger.info("your email Id is already registered");
            System.out.println("your email is already registered");
            return "home";
        } else {
            userService.saveUser(user);
            model.addAttribute("successMessage", "User has been registered successfully");
            logger.info("User has been registered successfully");
            System.out.println("User has been registered successfully");
            return "home";
        }
    }

    @PostMapping("/user/login") 
    public String doLogin(ModelMap model, @ModelAttribute("command")User user, HttpSession session) {

        if(userService.loginUser(user.getEmail(), user.getPassword()) != null) {
            session.setAttribute("email",user.getEmail());
            session.setAttribute("user_id", user.getId());
            model.addAttribute("sucessLogin", "You are login sucessfully");
            logger.info("You are login sucessfully",user.getEmail());
            System.out.println("You are login sucessfully "+ user.getEmail());
            return "redirect:userdashboard";
        }else {
            System.out.println("Invalid Email/Password");
            logger.error("Invalid Email/Password");
            model.put("failed", "Invalid Email/Password");
            return "home";
        }       
    }
    @PostMapping("/user/checkstatus")
    @ResponseBody
    public Integer checkUserStatus(String email, ModelMap model, @ModelAttribute("command")User user, HttpSession session) {
            int userStatus = userService.isActiveUserStatus(email);
            System.out.println(userStatus);
            if(userStatus != 0) {
                System.out.println(userStatus);
                return userStatus;
            }else {
                System.out.println(userStatus);
                return userStatus;
            }
    }
    @GetMapping("/logout")
    public String doLogout(ModelMap model, @ModelAttribute("command")User user, HttpSession session) {
        session.removeAttribute("email");
        logger.info("you are logout successfully");
        return "home";
    }
}

  • 用户.java
  • package com.rajesh.model;
    import java.util.Set;
    import javax.persistence.CascadeType;
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.JoinColumn;
    import javax.persistence.JoinTable;
    import javax.persistence.ManyToMany;
    import javax.persistence.Table;
    import javax.validation.constraints.Email;
    import javax.validation.constraints.NotEmpty;
    import org.hibernate.validator.constraints.Length;
    import lombok.AllArgsConstructor;
    import lombok.Builder;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    /**
     * @author Rajesh Bhushan
     */
    @Data
    @Builder
    @AllArgsConstructor
    @NoArgsConstructor
    @Entity
    @Table(name = "users")
    public class User extends BaseEntity{
    
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        @Column(name = "user_id")
        private int id;
    
        @Column(name="shopname")
        @Length(min = 3, message = "*Your shopname must have at least 3 characters")
        @NotEmpty(message = "*Please provide an shopname")
        private String shopname;
    
        @Column(name="name")
        @Length(min = 3, message = "*Your name must have at least 3 characters")
        @NotEmpty(message = "*Please provide an name")
        private String name;
    
        @Column(name="address")
        @Length(min = 3, message = "*Your address must have at least 3 characters")
        @NotEmpty(message = "*Please provide an address")
        private String address;
    
        @Column(name="mobile")
        @NotEmpty(message = "*Please provide an address")
        private String mobile;
    
        @Column(name = "email")
        @Email(message = "*Please provide a valid Email")
        @NotEmpty(message = "*Please provide an email")
        private String email;
    
        @Column(name = "password")
        @NotEmpty(message = "*Please provide your 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;
    
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        public String getShopname() {
            return shopname;
        }
        public void setShopname(String shopname) {
            this.shopname = shopname;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getAddress() {
            return address;
        }
        public void setAddress(String address) {
            this.address = address;
        }
        public String getMobile() {
            return mobile;
        }
        public void setMobile(String mobile) {
            this.mobile = mobile;
        }
        public String getEmail() {
            return email;
        }
        public void setEmail(String email) {
            this.email = email;
        }
        public String getPassword() {
            return password;
        }
        public void setPassword(String password) {
            this.password = password;
        }
        public int getActive() {
            return active;
        }
        public void setActive(int active) {
            this.active = active;
        }
        public Set<Role> getRoles() {
            return roles;
        }
        public void setRoles(Set<Role> roles) {
            this.roles = roles;
        }
    }
    
    
  • UserRepository.java
  • package com.rajesh.repository;
    import org.springframework.data.jpa.repository.JpaRepository;
    import org.springframework.data.jpa.repository.Query;
    import org.springframework.stereotype.Repository;
    
    import com.rajesh.model.User;
    @Repository
    public interface UserRepository extends JpaRepository<User, Long> {
        public User findByEmail(String email);
        @Query("from User as u where u.email=:email and u.password=:password")
        public User loginUser(String email,String password);
        @Query("select active from User as u where u.email=:email")
        public Integer isActiveUserStatus(String email);
    }
    
    

    4.UserService.java

    package com.rajesh.service;
    import java.util.Arrays;
    import java.util.Date;
    import java.util.HashSet;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    import com.rajesh.model.Role;
    import com.rajesh.model.User;
    import com.rajesh.repository.RoleRepository;
    import com.rajesh.repository.UserRepository;
    
    @Service
    public class UserService {
        @Autowired
        private UserRepository userRepository;
        @Autowired
        private RoleRepository roleRepository;
    
        public User findUserByEmail(String email) {
            return userRepository.findByEmail(email);
        }
        public void saveUser(User user) {
            user.setShopname(user.getShopname());
            user.setName(user.getName());
            user.setEmail(user.getEmail());
            user.setPassword(user.getPassword());
            user.setMobile(user.getMobile());
            user.setAddress(user.getAddress());
            user.setActive(0);
            user.setCreatedBy(user.getName());
            user.setCreatedDate(new Date());
            user.setUpdatedBy(user.getName());
            user.setUpdatedDate(new Date());
    
            Role userRole  = roleRepository.findByRole("USER");
            user.setRoles(new HashSet<Role>(Arrays.asList(userRole)));
            userRepository.save(user);
        }
        public User loginUser(String email,String password) {
            return userRepository.loginUser(email, password);
        }
        public Integer isActiveUserStatus(String email) {
            Integer activeStatus =  userRepository.isActiveUserStatus(email);
            return activeStatus;
        }
    }
    
    

    最佳答案

    在数据表上创建一个用户 ID 列。所以在列出数据时根据userid获取数据。

    关于java - 每个用户在通过他/她的凭据登录时都有自己的列出的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58371101/

    相关文章:

    java - Thread.sleep() 替代方案

    java - 如何将进度条同步到数据?

    Java,网络服务 : do I need Tomcat/GlassFish or any other server to run a simple "web service"

    java - 将 GATE 嵌入到 JAR 中以与 gatewayHome 一起使用

    Spring Boot + Hibernate Multi-Tenancy : @Transactional not working

    java - 如何在双向多对多映射中添加数据?(这不是添加数据的正常过程)

    java - Spring-JPA - 如何从自连接表输出有限字段

    java - 如何修改响应并绑定(bind)DTO

    java - Spring Boot : only for web application development?

    java - 如何使 Spring Security 允许匿名 POST 请求?