做化妆品代理在那些网站比较多,网站是不是要用代码做,韩国最新新闻消息,一级消防工程师考试报名目录 引出一、应用到的技术栈Spring、Spring MVC、Spring Boot基础SpringBoot进阶、SpringMVC原理、AOP切面MyBatis 数据库相关JavaWeb基础#xff1a;Session等前端Vue、JavaScript、Bootstrap 二、后台管理系统的功能登录功能1.用户名密码登录2.验证码的登录 报修业务的处理… 目录 引出一、应用到的技术栈Spring、Spring MVC、Spring Boot基础SpringBoot进阶、SpringMVC原理、AOP切面MyBatis 数据库相关JavaWeb基础Session等前端Vue、JavaScript、Bootstrap 二、后台管理系统的功能登录功能1.用户名密码登录2.验证码的登录 报修业务的处理楼宇信息管理房屋管理业主管理【核心功能】买房的业务意向用户信息登记后端相关代码 数据统计分析 三、系统必备的要素登录认证权限管理采用的模型和思路自定义注解和实现 另一种权限页面不同普通员工--夸夸自己我是boss--隐藏地图 日志管理全局异常 总结 引出
基于SpringBoot的简单的小区物业后台管理系统主要功能有报修的处理楼宇信息和房屋信息的管理业主信息的管理【核心】以及数据统计分析模块Echarts绘图此外采用用户-角色权限模型结合自定义注解实现简单的权限管理功能采用aop切面实现日志的存储全局异常的使用。
技术栈Spring、Spring MVC、Spring Boot、MyBatis、Echarts、Session、Vue、JavaScript、Bootstrap
本项目后端代码git仓库为 https://gitee.com/pet365/spring-community-manager 一、应用到的技术栈
Spring、Spring MVC、Spring Boot基础 Spring基础核心容器——从配置文件到注解开发 创建对象成员变量赋值IOC 增强方法AOP Spring基础Web-MVC——在idea中新建springWeb项目 浏览器请求 和 服务器响应 SpringMvc文件相关 Spring基础Data Access数据库——SpringSpringMVC 集成mybatis 拦截器 SpringBoot进阶、SpringMVC原理、AOP切面 SpringBoot基础——追根溯源servlet是啥tomcat是啥maven是啥 springBoot项目初步maven构建打包 测试 SpringMvc框架——【深入】SpringMVC 的运行流程从客户端发送请求request到springMvc框架返回响应response的全流程分析 DispatcherServlet SpringAOP切面 Spring进阶AOP的理解——静态/动态代理 面向切面编程AOPAspect Oriented Programming 日志记录 增强方法 Spring进阶AOP的应用—— 动态代理AOP后controller层的private方法访问失效的问题 MyBatis 数据库相关
【合集】MySQL的入门进阶强化——从 普通人 到 超级赛亚人 的 华丽转身 mybatis 是一个优秀的基于 java 的持久层框架主要应用于关系型数据库sql,它内部封装了 jdbc使开发者只需要关注 sql 语句本身而不需要花费精力去处理加载驱动、创建连接、创建 statement 封装数据等繁杂的过程。 mybatis 通过 xml 或注解的方式将要执行的各种 statement 配置起来并通过 java 对象和 statement 中sql 的动态参数进行映射生成最终执行的 sql 语句最后由 mybatis 框架执行 sql 并将结果映射为 java 对象并返回。 采用 ORM 思想解决了实体和数据库映射的问题对 jdbc 进行了封装屏蔽了 jdbc api 底层访问细节使我们不用与 jdbc api 打交道就可以完成对数据库的持久化操作。
JavaWeb基础Session等
Java网络开发Tomcat—— Servlet学习 Web相关背景知识 网页状态码304 JavaWeb项目初步 Java网络开发Session—— 从http请求 到 cookie 到 session 用 session控制 删改数据的权限 网页状态码——200正常、302重定向、304客户端有缓存、400浏览器请求传参异常、404未找到、405方法不允许、415不支持的媒体、500服务器异常 跨域 前端Vue、JavaScript、Bootstrap Java网络开发Asynchronous异步—— 从 Jsp 到 Ajax 的 axios 到 vue 同步请求 到 异步请求 前端基础JavaScript——基础语法变量分支… Json对象【重要】 函数定义 事件 前端基础CSS——css介绍 常用样式 案例—进化到Bootstrap——进化到Element-UI
二、后台管理系统的功能
登录功能
1.用户名密码登录
能够实现用户名和密码登录以及手机验证码登录其中手机验证码存储到session中键为登录的用户的手机号。 当时对于各种情况的用户进行了处理 离职员工 账号锁定 首次登录改密码 密码修改 2.验证码的登录 后台逻辑手机号校验多线程使用 报修业务的处理 前端页面 图片用的本地文件资源映射 批量删除当时的操作 1.真的delete删除了其实应该是逻辑删除把状态修改一下比如未处理0已处理1已删除2就暂时不显示 2.在删除之前没有做数据校验其实按理说删除之前应该检查一下状态是否还没有维修完成等 为了前期便于测试给了一个默认的登录用户admin便于前期进行接口测试不需要每次登录才能测试。 楼宇信息管理 快排功能 用动态sql 房屋管理 多条件查询 后端代码 用动态sql面积后端排序 入住日期排除前端实现 业主管理【核心功能】 业主管理的极简页面 详情页面 买房的业务 添加业主页面 买买买 买 添加新的业主成功 有几个小瑕疵
身份证号码没有进行校验记录人没有和登录的管理员绑定 实现可买的房子到买了的房子框框中的逻辑 意向用户信息登记 意向用户详情页面 后端相关代码 开始想用这种一个参数一个参数接收的方式,但是有一个参数是ist,一直报错后面用对象接收 尝试用了可变长度参数传参 从service到mapper 动态SQL的处理可变长度参数处理 楼栋 List 是否传入执行不同的sql语句查询 数据统计分析 采用Echarts进行数据统计分析图表绘制 进行了数据校验 后端数据校验 三、系统必备的要素
登录认证
采用拦截器如果没有登录就去登录页面 权限管理
采用的模型和思路
用3张表实现简单权限管理用户对应角色
自定义注解和实现 处理角色权限的注解 拦截器获得controller层上的注解 package com.tianju.interceptor;import com.alibaba.fastjson.JSON;
import com.tianju.anno.PreAuthorize;
import com.tianju.entity.ResData;
import com.tianju.entity.User;
import com.tianju.entity.UserAuth;
import com.tianju.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Arrays;Component
public class AuthorizeInterceptor implements HandlerInterceptor {Autowiredprivate IUserService userService;Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {User user (User) request.getSession().getAttribute(user);UserAuth userAuth userService.queryUserAuthByUsername(user.getUsername());// 如果请求的资源是经过controllerif (handler instanceof HandlerMethod){// 获取controller中方法上的注解HandlerMethod handlerMethod (HandlerMethod) handler;PreAuthorize preAuthorize handlerMethod.getMethod().getAnnotation(PreAuthorize.class);// 方法上有这个注解if (preAuthorize!null){String[] value preAuthorize.value();int index Arrays.binarySearch(value, userAuth.getRoleName());if (index 0){return true;}else {response.setContentType(application/json;charsetutf-8);response.setCharacterEncoding(UTF-8);response.getWriter().write(JSON.toJSONString(new ResData(300001, 没有权限访问该方法, null)));return false;}}}return true;}
} 配置拦截器 package com.tianju.config;import com.tianju.interceptor.AuthorizeInterceptor;
import com.tianju.interceptor.LoginAuthorInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;/*** springmvc的配置类* 1.是配置类Configuration* 2.是springmvc的配置类implements WebMvcConfigurer*/
Configuration
public class SpringMvcConfig implements WebMvcConfigurer {Value(${repairImg})String repairImgLocation;// 静态资源映射// 要点1.浏览器访问的连接 /repair/**2.映射的位置file:D:/620/repair/Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {registry.addResourceHandler(/repair/**).addResourceLocations(file:repairImgLocation); // 映射的位置}// 拦截器拦截谁放行谁AutowiredLoginAuthorInterceptor loginAuthorInterceptor;AutowiredAuthorizeInterceptor authorizeInterceptor;Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(loginAuthorInterceptor).addPathPatterns(/**) //拦截谁表示都拦截.excludePathPatterns(/user/loginPage,/user/login,/js/**,/css/**,/bootstrap/**,/img/**,/user/loginSms,/getSmsYzm);registry.addInterceptor(authorizeInterceptor).addPathPatterns(/**) //拦截谁表示都拦截.excludePathPatterns(/user/loginPage,/user/login,/js/**,/css/**,/bootstrap/**,/img/**,/user/loginSms,/getSmsYzm);}
}
另一种权限页面不同
普通员工–夸夸自己 我是boss–隐藏地图 日志管理 AOP切面用来记录日志什么时候谁访问了啥干了啥 package com.tianju.aop;import com.tianju.entity.User;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Before;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.aspectj.lang.annotation.Aspect;import javax.servlet.http.HttpSession;
import java.util.Arrays;
import java.util.Date;
/*** 记录日志用增强方法* 要点* 0.是增强类 Aspect在容器中 Component* 1.给谁做增强* 2.怎么增强before after afterReturning afterThrowing*//*** Component 在容器中* Aspect 是增强方法* Before(within(org.springframework.stereotype.Controller)) 给controller层增强*/
Component
Aspect
Slf4j // 用lombok.extern.slf4j.Slf4j;
public class LoggingAsp {Autowired // session也在容器里所以直接可以注入private HttpSession session;// 给所有标注了Controller注解的方法做增强Before(within(org.springframework.stereotype.Controller))public void log(JoinPoint joinPoint){String className joinPoint.getTarget().getClass().getSimpleName(); // 获取类名String methodName joinPoint.getSignature().getName(); // 获取方法名Object[] args joinPoint.getArgs(); // 获取传的参数// 获取当前登陆的人从session中获取User user (User) session.getAttribute(user);String username (usernull)?未登录人员:user.getUsername();log.info({}访问了{}类的{}方法传的参数为{},new Date() username,className,methodName, Arrays.toString(args));}
} 持久化日志到本地 # 日志的相关配置
logging:file:name: D:\\620\\log\\community.loglevel:org.springframework.web: debugcom.tianju: debugorg.springframework.jdbc.support.JdbcTransactionManager: debug
全局异常 如果没有全局异常处理则异常会一层一层从dao到service到controller,最后抛给前端然后用户看到一堆看不懂的东西 兜底异常返回统一异常信息更进一步的返回一个页面 总结
1.简单的小区物业后台管理系统主要功能有报修的处理楼宇信息和房屋信息的管理业主信息的管理【核心】以及数据统计分析模块Echarts绘图 2.此外采用用户-角色权限模型结合自定义注解实现简单的权限管理功能 3.采用aop切面实现日志的存储 4.全局异常的使用。