国外网站后缀,电商seo优化,大同本地做网站的,北京一诺网站建设公司java后端实现登录功能#xff0c;并用过滤器验证
登录#xff0c;退出功能
登录#xff0c;退出功能的逻辑思路#xff1a;* 1. 密码md5加密* 2. 根据用户名查询数据库* 3. 比对密码* 4. 查看状态* 5. 将员工的id存放到session代码实现Slf4j //输出日志方便调试
RestCon…java后端实现登录功能并用过滤器验证
登录退出功能
登录退出功能的逻辑思路* 1. 密码md5加密* 2. 根据用户名查询数据库* 3. 比对密码* 4. 查看状态* 5. 将员工的id存放到session代码实现Slf4j //输出日志方便调试
RestController
RequestMapping(/employee)
public class EmployeeController {//把创建的接口注入进来Autowiredprivate EmployeeService employeeService;/*** 员工登录** param request* param employee* return 处理逻辑* 1. 密码md5加密* 2. 根据用户名查询数据库* 3. 比对密码* 4. 查看状态* 5. 将员工的id存放到session** 完善登录功能使没有登录的用户不能随意访问一些特定的界面* 1. 过滤器实现 √* 1.1自定义过滤器* 1.2加入注解* 1.3完善过滤器的逻辑* 1.3.1获取本次请求的uri* 1.3.2判断本次请求是否需要处理* 1.3.3判断登录状态* 2. 拦截器*/PostMapping(/login)
//将员工对象的id存储到session以方便获取登录对象
public RObject login(HttpServletRequest request, RequestBody Employee employee){//1.密码加密处理String password employee.getPassword();password DigestUtils.md5DigestAsHex(password.getBytes());//2.根据用户输入名字查数据库信息,根据页面提交的用户名username查询数据库,包装一个查询对象LambdaQueryWrapperEmployee queryWrapper new LambdaQueryWrapper();queryWrapper.eq(Employee::getUsername,employee.getUsername());Employee emp employeeService.getOne(queryWrapper);//2.1 如果没有查询到就返回错误if(emp null){return R.error(登录失败);}//3.比对密码if(!emp.getPassword().equals(password)){return R.error(登录失败);}//4.查看员工状态if(emp.getStatus()0){return R.error(账号已禁用);}//5.将用户id存放在sessionrequest.getSession().setAttribute(employee,emp.getId());return R.success(emp);
}/*** 退出登录功能* param request** 需求分析点击退出按钮像/employee/logout发送退出请求请求方式为post* 代码开发* 1. 创建controller清理session中的用户信息* 2. 返回结果页面跳转到登录姐界面* 功能测试*/
PostMapping(/logout)
public RString logout(HttpServletRequest request){//清理session中的用户信息request.getSession().removeAttribute(employee);return R.success(退出成功);
}验证登录功能
完善登录功能使没有登录的用户不能随意访问一些特定的界面
逻辑* 1. 过滤器实现 √* 1.1自定义过滤器* 1.2加入注解* 1.3完善过滤器的逻辑* 1.3.1获取本次请求的uri* 1.3.2判断本次请求是否需要处理* 1.3.3判断登录状态* 2. 拦截器不详细说明代码实现/*** 检用户是否已经完成登录若没有则不可以进入特定的界面*/
WebFilter(filterName loginCheckFilter,urlPatterns /*)
Slf4j
public class LoginCheckFilter implements Filter {//路径匹配器支持通配符public static final AntPathMatcher PATH_MATCHER new AntPathMatcher();Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {HttpServletRequest request (HttpServletRequest) servletRequest;HttpServletResponse response (HttpServletResponse) servletResponse;//1.获取到本次请求的uriString requestURI request.getRequestURI();log.info(拦截到请求{},requestURI);//2.判断本次请求是否需要处理//定义一些不需要可以放行的路径String[] urls new String[]{/employee/login,/employee/logout,/backend/**,front/**};boolean check check(urls,requestURI);if(check){log.info(本次请求请求{}不要处理,requestURI);//3.如果不需要处理直接放行filterChain.doFilter(request,response);return;}//4.判读用户是否已经登陆,直接放行if(request.getSession().getAttribute(employee)!null){log.info(用户已登录用户id为{},request.getSession().getAttribute(employee));filterChain.doFilter(request,response);return;}log.info(用户未登录);//5.如果未登录通过输出流的方式向客户端页面响应数据response.getWriter().write(JSON.toJSONString(R.error(NOTLOGIN)));return;}/*** 检查本次请求是否需要放行* param requestURI* return*/public boolean check(String[] urls,String requestURI){for (String url : urls) {boolean match PATH_MATCHER.match(url,requestURI);if(match){return true;}}return false;
}}