【问题标题】:How to validate email password without using spring security and authentication in spring boot?如何在 Spring Boot 中不使用 Spring Security 和身份验证来验证电子邮件密码?
【发布时间】:2021-07-28 18:16:02
【问题描述】:

我是 spring boot 的新手,因为在 spring-boot 中完成了一个 crud 函数 rest API 后,我严重卡在了 android 应用程序的 login rest API 中,我只想在 POSTMAPPING 中使用电子邮件和密码。请问有人可以帮我吗?

控制器类


import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import demo.loginapi.main.model.UserModel;
import demo.loginapi.main.repository.UserRepository;
import demo.loginapi.main.repository.UserService;

@RestController
@RequestMapping("/api/user")
public class UserController {
    
    @Autowired
    UserRepository userRepository;
    
    @Autowired
    UserService userService;
    
    @GetMapping("/getallusers")
    public List<UserModel> getAllCustomer(){
        List<UserModel> alluserlist = userRepository.findAll();
        return alluserlist;
        
    }
    
    @PostMapping("/login/{email}")
    public List<UserModel> getemailpassword(@PathVariable(value = "email") String email){
        
        List<UserModel> alluseremailpassword = userRepository.findUserByEmail(email);
        return alluseremailpassword;
        
    }
    
    @PostMapping("/login2/{email}")
    public UserModel getuserbyemail(@PathVariable(value = "email") String email)
      
    {
        UserModel userByEmailForLogin = userRepository.findByEmail(email);
        
        return userByEmailForLogin; 
    }
    

    @PostMapping("/loginemailpass/{email}/{password}")
    public ResponseEntity<Map<String, String>> loginUser(@RequestBody Map<String, Object> userMap){
        
        String email = (String) userMap.get("email");
        String password = (String) userMap.get("password");
        
        UserModel userModel = userService.validate(email,password);
        
        return new ResponseEntity<>(generateJWTToken(userModel),HttpStatus.OK);

        
    }

    private  Map<String, String> generateJWTToken(UserModel userModel) {
        
        
        // TODO Auto-generated method stub
        return null;
    }


}

** 实体类 **

package demo.loginapi.main.model;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "user_login")
public class UserModel {
    
    @Id
    @Column(name = "userId", nullable = false)
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long userId;
    
    @Column(name = "username", nullable = false)
    private String username;
    
    @Column(name = "email", nullable = false)
    private String email;
    
    @Column(name = "password", nullable = false)
    private String password;
    
    @Column(name = "role", nullable = false)
    private String role;

    public UserModel() {
        //default constructor
    }
    
    public UserModel(Long userId, String username, String email, String password, String role) {
        //super();
        this.userId = userId;
        this.username = username;
        this.email = email;
        this.password = password;
        this.role = role;
    }

    public Long getUserId() {
        return userId;
    }

    public void setUserId(Long userId) {
        this.userId = userId;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    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 String getRole() {
        return role;
    }

    public void setRole(String role) {
        this.role = role;
    }

    @Override
    public String toString() {
        return "UserModel [userId=" + userId + ", username=" + username + ", email=" + email + ", password=" + password
                + ", role=" + role + "]";
    }
    
    
    

}

** 存储库类 **


import java.util.List;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
import demo.loginapi.main.model.UserModel;

@Repository
public interface UserRepository extends JpaRepository<UserModel, Long>{

    List<UserModel> findUserByEmail(String email);

    UserModel findByEmail(String email);

    //UserModel validate(String email, String password);

    
    UserModel findByEmailAndPaswword(String email, String password);

    //UserModel findByEmailPassword(String email, String password);

    
    
}

** 服务等级 **


import demo.loginapi.main.model.UserModel;

public interface UserService {

    UserModel validate(String email, String password);

}

** 服务实现 **

package demo.loginapi.main.repository;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import demo.loginapi.main.model.UserModel;

@Service
public class UserRepoImpl implements UserService{

    @Autowired
    UserRepository userRepository;
    
    @Override
    public UserModel validate(String email, String password) {
        if(email != null) email = email.toLowerCase();
        return userRepository.findByEmailAndPaswword(email, password);
    }
}

【问题讨论】:

  • 你能告诉我们究竟是什么不起作用,这样我们就不用逐行分析了吗?
  • 在存储库类和控制器类中,它的定义方式,即“字符串用户名,字符串密码”,显示为找不到字符串密码。

标签: java android spring spring-boot rest


【解决方案1】:

在您的存储库类中,在 jparepository 中是否可以使用 findByEmailAndPassword,如果不通过 @query 注释使用,例如 @query("select usename from userlogin us where us.username =:email") 在您的方法中类似的东西。

另外,如果预定义的方法可用,请检查拼写,似乎不正确。它有双w。 findByEmailAndPaswword

【讨论】:

  • 非常感谢,我一定会通过这些解决方案。
猜你喜欢
  • 2021-11-21
  • 2011-11-14
  • 2014-03-26
  • 2019-07-13
  • 2015-11-22
  • 2023-03-27
  • 2012-03-07
  • 2011-12-01
  • 2020-12-05
相关资源
最近更新 更多