您好,登錄后才能下訂單哦!
本篇內容介紹了“Java后端登錄功能怎么實現”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
頁面原型
1. 登錄頁面展示:項目路徑(\resources\backend\page\login\login.html)
員工點擊登錄按鈕進行后管平臺的登錄操作,登錄正確以外方式不可登錄。
登錄處理邏輯
將頁面提交的密碼進行MD5加密
根據用戶名查數據庫(查不到返回結果)
比對密碼(密碼錯誤返回結果)
查詢員工狀態,員工狀態禁用下不可登錄
登錄成功,寫入session中,返回結果。
package com.itheima.reggie.common; import lombok.Data; import java.util.HashMap; import java.util.Map; /** * 返回通用類 * @author jekong * @date 2022/4/22 */ @Data public class R<T> { /** 編碼:1成功,0和其它數字為失敗*/ private Integer code; /** 信息返回*/ private String msg; /** 信息返回數據*/ private T data; /** 動態數據*/ private Map map = new HashMap(); public static <T> R<T> success(T object) { R<T> r = new R<T>(); r.data = object; r.code = 1; return r; } public static <T> R<T> error(String msg) { R r = new R(); r.msg = msg; r.code = 0; return r; } public R<T> add(String key, Object value) { this.map.put(key, value); return this; } }
說明 | 值 |
請求URL | /employee/login |
請求數據 | { "username": "admin", "password": "123456" } |
返回數據 | { "code": 0, "msg": "登錄成功", "data": null, "map": {} } |
entity: 創建實體類
創建Employee.java(員工對象)
package com.itheima.reggie.entity; import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.TableField; import lombok.Data; import java.io.Serializable; import java.time.LocalDateTime; /** * 員工實體類 * @author jektong * @date 2022/4/21 */ @Data public class Employee implements Serializable { /** 序列號*/ private static final long serialVersionUID = 1L; /**唯一主鍵*/ private Long id; /**用戶名*/ private String username; /**姓名*/ private String name; /**密碼*/ private String password; /**電話*/ private String phone; /**性別*/ private String sex; /**身份證號碼*/ private String idNumber; /**狀態*/ private Integer status; /**創建時間*/ private LocalDateTime createTime; /**更新時間*/ private LocalDateTime updateTime; /**添加用戶時使用*/ @TableField(fill = FieldFill.INSERT) private Long createUser; /**更新用戶時使用*/ @TableField(fill = FieldFill.INSERT_UPDATE) private Long updateUser; }
mapper數據庫交互層
package com.itheima.reggie.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.itheima.reggie.entity.Employee; import org.apache.ibatis.annotations.Mapper; /** * EmployeeMapper * @author jektong * @date 2022/4/21 */ @Mapper public interface EmployeeMapper extends BaseMapper<Employee> { }
service業務層接口
package com.itheima.reggie.service; import com.baomidou.mybatisplus.extension.service.IService; import com.itheima.reggie.entity.Employee; import org.springframework.stereotype.Service; /** * @author jektong * @date 2022/4/21 */ public interface EmployeeService extends IService<Employee> { }
業務層實現類
package com.itheima.reggie.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.itheima.reggie.entity.Employee; import com.itheima.reggie.mapper.EmployeeMapper; import com.itheima.reggie.service.EmployeeService; import org.springframework.stereotype.Service; /** * @author jektong * @date 2022/4/21 */ @Service public class EmployeeServiceImpl extends ServiceImpl<EmployeeMapper, Employee> implements EmployeeService { }
controller控制層
package com.itheima.reggie.controller; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.itheima.reggie.common.CommonsConst; import com.itheima.reggie.common.R; import com.itheima.reggie.entity.Employee; import com.itheima.reggie.service.EmployeeService; import lombok.extern.slf4j.Slf4j; import org.springframework.util.DigestUtils; 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 javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; /** * 員工控制類 * * @author tongbing * @date 2022/4/21 */ @Slf4j @RestController @RequestMapping("/employee") public class EmployeeController { @Resource private EmployeeService employeeService = null; /** * 登錄請求處理 * TODO 后續改進將業務處理的代碼放入業務層,這里只做數據請求與返回 * @param request * @param employee * @return */ @PostMapping("/login") public R<Employee> login(HttpServletRequest request, @RequestBody Employee employee) { // 將頁面提交的密碼進行MD5加密 String password = employee.getPassword(); password = DigestUtils.md5DigestAsHex(password.getBytes()); // 根據用戶名查數據庫 LambdaQueryWrapper<Employee> queryWrapper = new LambdaQueryWrapper<Employee>(); queryWrapper.eq(Employee::getUsername, employee.getUsername()); Employee emp = employeeService.getOne(queryWrapper); // 查不到返回登錄失敗結果 if(emp == null){ return R.error(CommonsConst.LOGIN_FAIL); } // 比對密碼 if(!emp.getPassword().equals(password)){ return R.error(CommonsConst.LOGIN_FAIL); } // 查看員工狀態 if(emp.getStatus() == CommonsConst.EMPLOYEE_STATUS_NO){ return R.error(CommonsConst.LOGIN_ACCOUNT_STOP); } // 登錄成功將員工的ID放入session中 request.getSession().setAttribute("employeeId",emp.getId()); return R.success(emp); } }
Debug測試時主要測試以下幾點:
用戶名與密碼的校驗
用戶狀態禁用情況下
數據是否正確返回
常量類:
package com.itheima.reggie.common; /** * 常量定義 * @author jektong * @date 2022/4/23 */ public class CommonsConst { // 登錄失敗 public static final String LOGIN_FAIL = "登錄失敗"; // 賬號禁用 public static final String LOGIN_ACCOUNT_STOP = "賬號禁止使用"; // 員工賬號禁用狀態 0:禁用 public static final Integer EMPLOYEE_STATUS_NO = 0; // 員工賬號正常狀態 1:正常使用 public static final Integer EMPLOYEE_STATUS_YES = 1; }
“Java后端登錄功能怎么實現”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。