目录

项目文件组织结构

springbootschemaApplication

dao

controller

application.yml

entity

annotation

interceptor

config


项目文件组织结构

这是后端部分的源码结构图

springbootschemaApplication

springbootschemaApplication是整个项目的入口

package com;import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
@MapperScan(basePackages = {"com.dao"})
public class SpringbootSchemaApplication {public static void main(String[] args) {SpringApplication.run(SpringbootSchemaApplication.class, args);}}
@SpringBootApplication
说明这是一个springboot应用@MapperScan(basePackages = {"com.dao"})

这个是说明他要扫描dao包

dao

dao包里声明了一些方法,service层就可以调用这些方法。

controller

controller是MVC中的C层,controller又调用了service层,service分为接口和实现类

service层又调用了dao层

application.yml

 application.yml也是一个springboot启动后会自动加载的配置文件,这里定义了mybatis-plus的一些配置,classpath*指的是

这俩

为什么说是折俩能看这个项目结构中说明了源文件、测试文件、资源文件和项目启动后的target文件的目录位置。

application.yml这里的mapper指的就是下面这个

entity

这里用了一些和数据库一一对应的实体类

# Tomcat
server:tomcat:uri-encoding: UTF-8port: 8080servlet:context-path: /springbootjlvpCspring:datasource:driverClassName: com.mysql.jdbc.Driverurl: jdbc:mysql://127.0.0.1:3306/springbootjlvpC?useUnicode=true&characterEncoding=utf-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTCusername: rootpassword: 123456servlet:multipart:max-file-size: 10MBmax-request-size: 10MBresources:static-locations: classpath:static/,file:static/#mybatis
mybatis-plus:mapper-locations: classpath*:mapper/*.xml#实体扫描,多个package用逗号或者分号分隔typeAliasesPackage: com.entityglobal-config:#主键类型  0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID";id-type: 1#字段策略 0:"忽略判断",1:"非 NULL 判断"),2:"非空判断"field-strategy: 2#驼峰下划线转换db-column-underline: true#刷新mapper 调试神器refresh-mapper: true#逻辑删除配置logic-delete-value: -1logic-not-delete-value: 0#自定义SQL注入器sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjectorconfiguration:map-underscore-to-camel-case: truecache-enabled: falsecall-setters-on-nulls: true#springboot 项目mybatis plus 设置 jdbcTypeForNull (oracle数据库需配置JdbcType.NULL, 默认是Other)jdbc-type-for-null: 'null'

annotation

package com.annotation;import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;/*** 登录用户信息*/
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
public @interface APPLoginUser {}
package com.annotation;import java.lang.annotation.*;/*** 忽略Token验证*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface IgnoreAuth {}
package com.annotation;import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;/*** 登录用户信息*/
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
public @interface LoginUser {}

interceptor

这里可以体现出面向切面编程的思想,所有的方法都要经过这里过滤

package com.interceptor;import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;
import com.alibaba.fastjson.JSONObject;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.apache.commons.lang3.StringUtils;
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 com.annotation.IgnoreAuth;
import com.entity.EIException;
import com.entity.TokenEntity;
import com.service.TokenService;
import com.utils.R;/*** 权限(Token)验证*/
@Component
public class AuthorizationInterceptor implements HandlerInterceptor {public static final String LOGIN_TOKEN_KEY = "Token";@Autowiredprivate TokenService tokenService;@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {//支持跨域请求response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");response.setHeader("Access-Control-Max-Age", "3600");response.setHeader("Access-Control-Allow-Credentials", "true");response.setHeader("Access-Control-Allow-Headers", "x-requested-with,request-source,Token, Origin,imgType, Content-Type, cache-control,postman-token,Cookie, Accept,authorization");response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));IgnoreAuth annotation;if (handler instanceof HandlerMethod) {annotation = ((HandlerMethod) handler).getMethodAnnotation(IgnoreAuth.class);} else {return true;}//从header中获取tokenString token = request.getHeader(LOGIN_TOKEN_KEY);/*** 不需要验证权限的方法直接放过*/if(annotation!=null) {return true;}TokenEntity tokenEntity = null;if(StringUtils.isNotBlank(token)) {tokenEntity = tokenService.getTokenEntity(token);}if(tokenEntity != null) {request.getSession().setAttribute("userId", tokenEntity.getUserid());request.getSession().setAttribute("role", tokenEntity.getRole());request.getSession().setAttribute("tableName", tokenEntity.getTablename());request.getSession().setAttribute("username", tokenEntity.getUsername());return true;}PrintWriter writer = null;response.setCharacterEncoding("UTF-8");response.setContentType("application/json; charset=utf-8");try {writer = response.getWriter();writer.print(JSONObject.toJSONString(R.error(401, "请先登录")));} finally {if(writer != null){writer.close();}}
//              throw new EIException("请先登录", 401);return false;}
}

config


package com.config;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import com.baomidou.mybatisplus.mapper.MetaObjectHandler;
import com.baomidou.mybatisplus.plugins.PaginationInterceptor;/*** mybatis-plus配置* @author yangliyuan* @date 2019年6月25日 上午10:41:15*/
@Configuration
public class MybatisPlusConfig {/*** 分页插件*/@Beanpublic PaginationInterceptor paginationInterceptor() {return new PaginationInterceptor();}}

Configuration经典的springboot的约定大于配置思想,这里就配置了一个当数据多的时候分页。约定大于配置就是我们不配置就用默认的springboot的配置,我们配置了就覆盖掉默认的。

package com.config;import org.springframework.context.annotation.Bean;
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.WebMvcConfigurationSupport;import com.interceptor.AuthorizationInterceptor;@Configuration
public class InterceptorConfig extends WebMvcConfigurationSupport{@Beanpublic AuthorizationInterceptor getAuthorizationInterceptor() {return new AuthorizationInterceptor();}@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(getAuthorizationInterceptor()).addPathPatterns("/**").excludePathPatterns("/static/**");super.addInterceptors(registry);}/*** springboot 2.0配置WebMvcConfigurationSupport之后,会导致默认配置被覆盖,要访问静态资源需要重写addResourceHandlers方法*/@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {registry.addResourceHandler("/**").addResourceLocations("classpath:/resources/").addResourceLocations("classpath:/static/").addResourceLocations("classpath:/admin/").addResourceLocations("classpath:/front/").addResourceLocations("classpath:/public/");super.addResourceHandlers(registry);}
}

权限验证的配置,前面提到一个面向切面(中断)的思维,从我一个小白的角度看就是一个过滤,说明了他要过滤谁怎么过滤。对什么验证对什么不验证。

JavaEE课程设计(项目详细设计)相关推荐

  1. 数据结构课程设计——项目2:校园导游咨询(图 Dijkstra算法寻找最短路径)

    数据结构课程设计--项目2:校园导游咨询(图 Dijkstra算法寻找最短路径) 一.问题描述和项目要求 1.1 问题描述 1.2 基本要求 二.问题分析 2.1 程序功能设计分析 2.2 程序实现分 ...

  2. 表决器c语言课程设计,项目二:玩转RGB点阵屏——表情表决器

    项目二:玩转RGB点阵屏--表情表决器项目二:玩转RGB点阵屏--表情表决器(建议2课时) [情境导入] 图2.1 医护人员"逆行"湖北 是她们不畏生死驰援湖北,为中国抗疫带来胜利 ...

  3. 数据结构课程设计——项目1:中国计算机设计大赛赛事统计

    1.问题描述 参加计算机设计大赛的n个学校编号为1~n,赛事分成m个项目,项目的编号为1~m.比赛获奖按照得分降序,取前三名,写一个统计程序产生各种成绩单和得分报表. 2.基本要求 1)每个比赛项目至 ...

  4. 数据结构课程设计——项目2:校园导游咨询

    一.实验内容及实验要求 [问题描述] 设计一个校园导游程序,为来访的客人提供各种信息查询服务. [基本要求] 设计你所在学校的校园平面图,所含景点不少于10个.以图中顶点表示校 内各景点,存放景点名称 ...

  5. 《JavaEE课程设计报告》教师给学生布置作业系统设计报告

    一.题目与要求 开发一个作业管理系统,该系统有两类角色:教师(教师也是管理员)与学生. 教师: (0)可以将一个教学班的学生信息一次导入(也可以单独添加一个学生),用户名和密码默认为学号.注意,按教学 ...

  6. java ee课程设计报告书_Javaee-课程设计报告

    Javaee-课程设计报告 河北经贸大学课程设计报告 --JavaEE课程设计 问答交流系统 专业名称: 学 号: 学生姓名: 指导老师: 完成时间: 成 绩: 评语: 河北经贸大学课程设计报告 -- ...

  7. 计算机组成中CM,基于TDN-CM++计算机组成原理课程设计.doc

    课程设计 东 莞 理 工 学 院 本 科 课 程 设 计 课程设计题目:具有运算及跳转功能的复杂模型机的设计 学 生 姓 名:黄少贞 学 号:201141404222 系 别:计算机学院 专 业 班 ...

  8. Python数据处理课程设计-房屋价格预测

    注:可能有些图片未能成功上传,可在文档处进行下载 链接:Python数据处理课程设计-房屋价格预测-机器学习文档类资源-CSDN下载 课程设计报告 课程名称 Python数据处理课程设计 项目名称 房 ...

  9. Java-小游戏-炸弹人-课程设计-搜索算法

    项目链接:Java小游戏-炸弹人-课程设计-论文-AI-其他文档类资源-CSDN下载Java小游戏-炸弹人-课程设计-论文-AI-其他文档类资源-CSDN下载项目描述:https://blog.csd ...

  10. java课程设计家庭财务管理系统_javaEE-课程设计-个人财务管理系统

    <javaEE-课程设计-个人财务管理系统>由会员分享,可在线阅读,更多相关<javaEE-课程设计-个人财务管理系统(5页珍藏版)>请在人人文库网上搜索. 1.javaEE- ...

最新文章

  1. php Pthread 多线程 (五) 线程同步
  2. Ajax提交后Moedl And View不进行页面跳转的解决方案
  3. 容器源码解析之LinkedHashMap(九)
  4. HTML5将终结浏览器与应用程序间的争论
  5. 深度学习“奠基人”特伦斯:人工智能算法框架可被科学家掌控
  6. C++笔记-设置cout输出数据的宽度和填充
  7. 帆软报表决策系统重置用户密码插件
  8. hadoop2.7.1安装初上手
  9. 递归装饰器正则运算模块
  10. 一串数字中有两个只出现一次的数字其余都是成对相同,求这两个数
  11. 我的数据分析师转型之路,从零到字节跳动数据分析师
  12. Spring Boot实训开发个人博客9 - 标签管理
  13. 微软中国2023校招【内推】全面开启!
  14. 黑盒测试---等价类划分
  15. 1-65535字符集
  16. 50.网络安全渗透测试—[穷举篇13]—[wfuzz多线程百万密码测试指定后台破解]
  17. 136A.Presents
  18. 关于百度地图设置显示的比例尺大小
  19. 视频压缩怎么弄?建议收藏这些方法
  20. java旧版下载地址_Java下载 - 最新版、历史版本的官方下载地址

热门文章

  1. 时间序列数据挖掘模板:墨尔本10年气候变化(含代码和数据集)
  2. 快速入门 Python 爬虫常用解析库(xpath、bs4)
  3. 103-gold深入
  4. css和html实现花瓣动画效果:
  5. Elvis java,如何在Java 8中实现Elvis运算符?
  6. java基础篇(3) 自增自减与贪心规则
  7. 荣耀将发布首款鸿蒙操作系统手机,荣耀智慧屏正式发布:首搭华为鸿蒙操作系统...
  8. 各种图片读取的函数读取到的数据格式是 RGB 还是 BGR?
  9. Pads 导入PCB框图技巧
  10. 叉乘点乘混合运算公式_【已排版】人教版五年级数学下册概念与公式,精心整理!...