Controller模块
api都定义成RestController
@Controller类中的方法可以直接通过返回String跳转到jsp、ftl、html等模版页面
在方法上加@ResponseBody注解,也可以返回实体对象。
@RestController类中的所有方法只能返回String、Object、Json等实体对象,不能跳转到模版页面
注解 @RequestMapping 可以用在类定义处和方法定义处。
类定义处:规定初步的请求映射,相对于web应用的根目录;
方法定义处:进一步细分请求映射,相对于类定义处的URL。如果类定义处没有使用该注解,则方法标记的URL相对于根目录而言;
requestMapping对应所有的get/post/delete方法
service模块
定义接口不需要注解
实现接口需要@Service注解
常常被应用在Controller里边
pojo
pojo实现需要
@Data
@NO
@ALl
内部定义
Interger
String
主键前需要@TableId注解
Date类需要@JsonFormat
Mapper
定义成驼峰命名法
Mapper都是接口
继承子BaseMapper<pojo名>
实现private UserMapper usermapper;
常常定义在Service里边
关于前后端通信定义的类型
Add/Remove/Update/login/register 往往需要返回map用来回馈信息
Get需要返回List
关于界面
仅仅放行login和register意味着访问对应的api不需要token 而对于其他的api
需要加上token 而不是访问一个页面就跳转 可以直接再springboot项目中定义页面的示例
是y总在展示springboot的security和对应的旧的验证方式的 在前端我们定义的是访问其他页面
如果有token就可以访问 没有token跳转到login页面 登录之后 放回一个token放在全局变量中
这和springboot-security是没有关系的
Jwt验证原理
在Service里有一个UserDetailsService从数据库里读取数据库信息 做一个比对 成功则返回sessionId
授权(不公开)页面判断sessionID是否有效 将user提取到上下文中 正常访问controller
jwt不需要服务器端存储 `userId+密钥`->映射到另一个字符串(token) 将这个字符串发送给客户端
客户端访问时 加上自己的userid和token token由于没法知道密钥 token没法更新
token access/refresh 用来防止窃取 get/post 用access访问页面 将user提取到上下文中 正常访问controller
根据讲义配置
实现service.impl.UserDetailsServiceImpl类,继承自UserDetailsService接口,用来接入数据库信息
实现config.SecurityConfig类,用来实现用户密码的加密存储
实现utils.JwtUtil类,为jwt工具类,用来创建、解析jwt token
实现config.filter.JwtAuthenticationTokenFilter类,用来验证jwt token,如果验证成功,则将User信息注入上下文中
配置config.SecurityConfig类,放行登录、注册等接口
enable annniot lombok
配置crosConfig
解决跨域问题,登录注册
实现config.SecurityConfig
仅配置6行
实现utils.JwtUtil
配完运行一下
实现config.filter.JwtAuthenticationTokenFilter
类 配完运行一下
注意这里的东西需要修改一下
配置config.SecurityConfig类
配置完之后运行一下 成功运行就可以了
今天早上一直出错 应该是直接复制的Security的类 应该先创建再配置一下
常用的配置类和依赖
config.MybatisConfig
用来分页
joor-java-8
用来再java项目内部运行java代码
· · ·
spring-boot-starter-websocket
fastjson
添加config.WebSocketConfig
配置类用来集成websocket类:用来进行服务器主动向客户端发送请求
上节课CrosConfig没有用 是用来传sessionid的
springSecruty配置流程
配置完User/pojo和mapper之后
UserDetailsServiceImpl
和
UserDetailes
UserDetails这个接口,它代表了最详细的用户信息
Authentication的getCredentials()与UserDetails中的getPassword()需要被区分对待,
前者是用户提交的密码凭证,后者是用户正确的密码
UserDetailsService 只有 loadUserByUsername 一个接口方法, 用于通过用户名获取用户数据.
返回 UserDetails 对象, 表示用户的核心信息 (用户名, 用户密码, 权限等信息)
@Service
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
QueryWrapper<User> queryWrapper=new QueryWrapper<>();
queryWrapper.eq("username",username);
User user=userMapper.selectOne(queryWrapper);
if(user==null){
throw new RuntimeException("用户不存在");
}
return new UserDetailsImpl(user);
}
这里查询的时候需要检查是否为空
然后实现这里的User DetailsImpl
在同目录utils下
@Data
public class UserDetailsImpl implements UserDetails 重写方法
把这两个写完
跑一下没有错误
后端配置
新建service.impl.UserDetailsServiceImpl
继承UserDetailsService
(SpringSecurity配置中的类)
用来于数据库建立连接
新建软件包Config
用来存放配置
新建pojo-Admin
@Data
@AllArgs
@NoArgs
@TableId(type= IdType.AUTO)
private Interger/String/
对应表中的 int/varchar()
新建Mapper
@Mapper
interface extends BaseMapper<Admin>
id: int:非空、自动增加、唯一、主键
user_id: int:非空
注意:在pojo中需要定义成userId,在queryWrapper中的名称仍然为user_id
title: varchar(100)
description: varchar(300)
content:varchar(10000)
rating: int:默认值为1500
createtime: datetime
pojo中定义日期格式的注解:@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
modifytime: datetime
pojo中定义日期格式的注解:@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
pojo
层:将数据库中的表对应成Java中的Class
mapper
层(也叫Dao层):将pojo层的class中的操作,映射成sql语句
service
层:写具体的业务逻辑,组合使用mapper中的操作
controller
层:负责请求转发,接受页面过来的参数,传给Service处理,接到返回值,再传给页面
依赖
- Mysql连接类
Spring Boot Starter JDBC //用来连接mysql 项目运行时可以通过代码连接数据库
MySQL Connector/J
- jdbc 添加
application.properties
添加配置
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.url=jdbc:mysql://localhost:3306/kob?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
//这里有两个地方需要更改 kob?和password
Project Lombok
配置 开发辅助类
@Data
@AllArgsConstructor
@NoArgsConstructor
mybatis-plus-boot-starter
和
mybatis-plus-generator
@Mapper
public interface BotMapper extends BaseMapper<Bot>
spring-boot-starter-security
用来控制安全
具体内容需要搭配讲义 实现config类
jjwt-api
jjwt-impl
jjwt-jackson
登录使用的jwt验证