如何在不使用Spring Security的情况下实现Spring管理员仅登录功能及用户校验
不依赖Spring Security的管理员登录功能实现
以下实现基于Spring Boot + Spring Data JPA技术栈,你已完成的带getter、setter、构造函数的Admin实体类无需调整,各层新增内容如下:
1. AdminRepository层实现
该层负责和数据库交互,新增根据用户名查询管理员的方法即可:
public interface AdminRepository extends JpaRepository<Admin, Integer> { // 根据用户名查询对应管理员记录 Admin findByName(String name); }
2. AdminService层实现
该层负责核心登录校验逻辑:
第一步:定义AdminService接口
public interface AdminService { // 登录校验方法,返回true代表校验通过,false代表校验失败 boolean login(String username, String password); }
第二步:实现接口逻辑
@Service public class AdminServiceImpl implements AdminService { @Resource private AdminRepository adminRepository; @Override public boolean login(String username, String password) { // 1. 根据传入的用户名查询数据库记录 Admin admin = adminRepository.findByName(username); // 2. 用户名不存在直接返回校验失败 if (admin == null) { return false; } // 3. 比对密码(生产环境请对传入的password做加密处理后再比对,禁止明文校验) return password.equals(admin.getPassword()); } }
3. AdminController层实现
该层负责对接前端登录请求,返回校验结果:
@RestController @RequestMapping("/admin") public class AdminController { @Resource private AdminService adminService; @PostMapping("/login") public Map<String, Object> login(@RequestParam String username, @RequestParam String password) { Map<String, Object> result = new HashMap<>(); boolean loginResult = adminService.login(username, password); if (loginResult) { result.put("code", 200); result.put("msg", "登录成功"); // 登录成功后可在此处生成JWT令牌或者绑定Session返回给前端,用于后续接口的身份校验 // result.put("token", UUID.randomUUID().toString().replace("-","")); } else { result.put("code", 401); result.put("msg", "用户名或密码错误"); } return result; } }
注意事项
- 密码安全:生产环境禁止明文存储密码,管理员账号入库时需用MD5、BCrypt等不可逆加密算法处理,校验时将前端传入的密码加密后再与数据库存储的值比对
- 防暴力破解:可新增登录失败次数统计逻辑,短时间内同一账号/IP登录失败超过指定次数则临时冻结,避免被暴力破解
- 参数校验:可新增参数合法性校验规则,比如用户名、密码非空判断,避免非法参数请求
内容的提问来源于stack exchange,提问作者Imran Pasha M S
相关产品推荐
相关产品推荐

