员工登录功能实现
员工登录页面login.html存放在/resources/backend/page/login目录下。
启动项目,在浏览器中通过地址“http://localhost:8080/backend/page/login/login.html”访问员工登录页面。
按下快捷键F12打开浏览器调试工具后,单击“登录”按钮,浏览器抓取到登录的请求信息。
定义Mapper接口
自定义的Mapper接口可以继承BaseMapper获得通用的增删改查功能。
在项目的src/main/java目录下创建com.itheima.reggie.mapper包,在该包下创建员工Mapper接口EmployeeMapper。
@Mapper
public interface EmployeeMapper extends BaseMapper<Employee> {
}
定义Service接口
public interface EmployeeService extends IService<Employee> {
}
定义Service实现类
@Service
public class EmployeeServiceImpl extends ServiceImpl<EmployeeMapper, Employee> implements EmployeeService {
}
定义Controller类
@RestController
@RequestMapping("/employee")
public class EmployeeController {
@Autowired
private EmployeeService employeeService;
@PostMapping("/login")
public R<Employee> login(@RequestBody Employee employee, HttpServletRequest request){
//1.将页面提交的密码password进行MD5加密处理
String password = employee.getPassword();
password = DigestUtils.md5DigestAsHex(password.getBytes());
//2.根据页面提交的用户名username查询数据库
QueryWrapper<Employee> query = new QueryWrapper<>();
query.eq("username", employee.getUsername());
Employee one = employeeService.getOne(query);
//3.如果没有查询到员工信息或者密码不正确,则返回登录失败结果
if(one==null || !one.getPassword().equals(password)){
return R.error("用户名或密码错误");
}
//4.查看员工状态,如果为已禁用状态,则返回员工已禁用结果
if(one.getStatus() == 0){
return R.error("账号已禁用");
}
//5.登录成功,将员工Id存入Session并返回员工信息
request.getSession().setAttribute("loginEmployee", one);
return R.success(one);
}
}
登录功能测试
启动项目,在浏览器中通过地址“http://localhost:8080/backend/page/login/login.html”访问员工登录页面,在登录页面使用错误的账号或密码进行登录。
使用正确的账号和密码进行登录。
登录拦截功能
管理端的员工登录已经实现完成,但是此时员工如果不登录,也可以直接访问管理端的其他页面。
对此,可以使用拦截器
对请求进行拦截判断,判断员工是否已经完成登录,如果没有登录则跳转到登录页面。
com/itheima/reggie/config/LoginInterceptor.java
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
Object loginEmployee = request.getSession().getAttribute("loginEmployee");
if (loginEmployee == null) {
//未登录,返回登录页
response.sendRedirect("/backend/page/login/login.html");
return false ; //不放行
}
return true ; //放行
}
}
在com/itheima/reggie/config/WebMvcConfig.java
中注册拦截器,并设置拦截的路径。
/**
* 员工登录拦截器
* @param registry
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/backend/page/**","/backend/index.html")
.excludePathPatterns("/backend/page/login/login.html");
}
这里拦截器只设置了拦截前端的页面,真实开发后端接口也需要拦截。
至此,员工没有成功登录的话,访问其他路径都会自动跳转到登录页面。
员工退出登录
员工登录成功后,会将对应的员工信息存入到Session中,以记录员工的登录状态。相反,如果想要实现员工退出,则可以在收到退出请求后,将当前员工存放在Session中的信息清除即可。
/controller/EmployeeController.java
添加logout方法。
@PostMapping("/logout")
public R<String> logout(HttpServletRequest request){
request.getSession().removeAttribute("loginEmployee");
return R.success("退出成功");
}
至此,点击后台首页右上角退出按钮进行退出。