一周总结

3.11
3.10号失败的原因 Mapper接口没加@mapper
实体层未set get
Pom加依赖,properties配置,实体层
Mapper层
增删改查
Mapper层主要想 参数和返回值
查:返回值Student类型 参数为int或者无 查询多条语句时 要用list<>
增、删、改:返回值一般为int 参数为Student类型的

增:public int insert(Student student)— studentMapper. insert>0 (boolean)
删: public int delete(integer id);—studentMapper.delete>0(boolean)
改:public int update(Student student)—studntMapper.update>0(boolean)

查:public list selectall();
public student selectById(integer id);
Controller层
@RestController @Resources或者@Autowired 表单一般用Post
增:返回用Objiect,用Request.getParameter(“name”).trim();接受用户传来的参数
注入到Student对象中,调用Service方法,用boolean接受,验证成功与否
(常用的json对象 jsonObject 用于传回给请求结果)
删:接受id,调用service方法,boolean类型接受
改:用Request.getParameter("").trim接受用户传参,用jsonObject返回
查:直接调用StudentService.allStudent
增删改查都用Object,public Object …(){ }

缺乏的知识:
Controller 更新歌手图片
public Object updateStudentPic(@RequestParam(“file”) MultipartFile avatorFile
,@RequestParam(“id”)int id) {}
对于查来说结果类型比较重要:resultType=Student

insert into student

id






update student

name=#{name}

where id = #{id}

 根据性别查询
 select name,age from student where sex = #{sex}
 根据歌手名字模糊查询列表
 select name,age from student where name like #{name} 

3.12 Vue环境配置 配置linux Docker Linux redis shiro Git SpringCloud
jar包运行到linux
到镜像
Docker学习笔记:容器 仓库 镜像
服务器包含多个仓库,每个仓库又包含多个镜像,每个镜像有不同的标签(tag)
由镜像生成docker容器,一种容器运行一种服务
1.是什么
一次构建 处处运行
前提:熟悉linux命令和相关背景知识
Git相关知识
2.能干啥
Java工程师离不开linux系统

3.15 看anfangpingtai项目,熟悉项目
AfSequenceController逻辑
1.真实项目的业务
web层通用数据处理 BaseController
日期格式的字符串Date数据转换、设置请求分页数据、设置请求排序数据、
获取request、获取response、获取session、响应请求分页数据
AfAcspointtableController
@RequiresPermission(“system:acspointtable:view”)

2.缺乏知识
Thymeleaf应用:是一个跟Velocity、FreeMarker类似的模板引擎,可以完全的替代jsp
th标签整理 ${…}
用Swagger框架:1.接口的文档在线自动生成 2.功能测试
核心模块:com.ruoyi
shiro权限管理

3.Controlle方法上:
查询序列(分页 BaseController和TableDataInfo):@RequiresPermissions(“system:sequence:list”)权限
@PostMapping("/list")Post方式
@ResponseBody json数据转换
导出序列列表:@Log(…) 获取日志
查询序列列表用TableDateInfo(接受)–返回BaseController.getDataInfo(list) (储存数据) 从而完成响应请求(查询)和分页数据
此项目接受数据和返回数据都是自己定义的实体和方法

新增序列--新增保存序列(AjaxResult接受数据和BaseController):return toAjax(service.isnertAfSequence(afSequence))
                       protected AjaxResult toAjax(int rows){ return row>0?success():error(); }
                       用户点击--/add--/system/sequence/add(这一步才是真正的操作数据库)"
                       toAjax(................(int rows))

                       以AjaxRsult做返回给用户的消息类   操作中增删改 用BaseController.tpAjax(返回值必须是AjaxRsult类型)来判定是否操作成功。
                       AjaxResult(与用户交涉的返回值):操作消息提醒,里面包含 状态码 返回内容 数据对象 enum
                       BaseController.toAjax(一个判断):Mapper执行之后返回一个数值num,然后根据num是否大于零来返回success或者error(return rows > 0 ? success() : error();) 


删除序列:用户点击删除,BaseController.toAjax(serviec.delete......................)判断并返回,AjaxResult显示操作结果。


修改序列(先根据seqName进行查找,数据报存到ModelMap)--修改报存序列(AjaxResult接受 BaseController.toAjax判断,需要时先查询修改的名字是否存在,再进行判断能否保存):
                       用户点击修改首先进行查找序列数据存储到ModelMap对象中,然后再进行数据库操作

查 增 删 改----BaseController(toAjax,getDataTable) AjaxResult TableDataInfo
(实际要操作数据库的方法上面都有@RequiresPermissions("  ") ,shiro进行验证     );

3.16 熟悉git,并尝试编写一个表的功能
修改和新增一般都是两个(一个@GetMapping(用于显示操作页面)一个@PostMapping)
删除增加修改 @Log(title = “sk”,businessType = BusinessType.DELETE)
AjaxResult交互 toAjax判断
git add.
git commit
git push
Ajax:onreadystatechange=function(){

     }
 异步对象的属性:readstate    表示异步对象请求的状态变化
 创建--初始请求--发送请求--得到数据--数据处理完成
 01234
 异步对象的status属性,表示网络请求的状况的

3.17 熟悉若依框架
1.熟悉ruoyi
2.一个一个的看controller
KaTeX parse error: Expected '}', got 'EOF' at end of input: … if((this).width()<769){
paneHidden = true;
}
KaTeX parse error: Expected 'EOF', got '}' at position 145: …); }̲); 以….(ID名)即可。
( " a ) . c l i c k ( f u n c t i o n ( ) ) 标 签 选 择 器 ("a).click(function(){}) 标签选择器 ("a).click(function())(‘p)、类选择器 ( ′ . m y C l a s s ′ ) 、 i d 选 择 器 ('.myClass')、id选择器 (.myClass)id(’#myId’)
可以将URL中的/{xxx}通过@PathVariable(“xxx”)绑定到操作方法的入参中,区别于URL用?号传参。

       shiro:拿到安全管理器(SecurityManager),简单易用 CacheManager 只会第一次调用数据库赋予权限,并存储到CacheManager
       关键对象(subject) 主体 就是应用程序,用户
       身份信息(Principal):具有唯一性,用户名、手机号、邮箱地址,一个主体必须有一个主身份。
       凭证信息(credential):凭证信息,只有主体自己知道的安全信息,如密码、证书
       认证的开发: 结合web项目使用。     
       shrio的配置文件:.ini结尾文件
       流程:1.构建shiro.ini(用来学习shiro书写我们系统中相关权限数据)[users]
                 认证(创建一个类)
                 //创建安全管理器对象
                 Securitymanage securitymanage = new DefaultSecurityManage();
                 //给安全管理器设置realm
                 securitymanage.setReaalm(new IniRealm(""))
                 //SecurityUtils给全局安全工具类设置安全管理器
                 SecurityUtils.setSecurityManager(defaultSecurityManagee);
                 //关键对象 subject主体
                  new UsernamePasswordToken("","");
                 //创建令牌
                  subject.login(token);
          7.自定义realm:将认证/授权数据的来源转为数据库的实现 extends AuthorizingRealm
                  AuthenticatingRealm 认证 realm   doGetAuthenticationInfo
                  AuthorizingRealm      授权 realm   doGetAuthorizationInfos
           8.MD5和Salt的简介和执行流程说明
                  MD5:作用:一般用来加密或者签名
                             特点:MD5算法不可逆,无论内容相同无论执行多少次md5生成的结果始终是一致。
                             "123"========>fe1234542df.................穷举算法
                              生成结果:始终是一个36尽职32位长度的字符串
                 MD5操作:让自己的密码完成加密要在业务层(Service)做。
                 为了防止用户的密码(123456)被穷举算法计算出来,所以Service是Salt(盐)+MD5(123456+X*oq)
                 --1.根据用户名查询    2.比较密码   md5(123456+X*oq)
                 注册时生成随机盐,登录时先根据用户名查询盐(盐要存储)
            9.shiro中MD5+Salt的实现
                 MD5Hash mh=new Md5Hash();
                 md5Hash.setBytes("".getBytes());
                 String s=md5Hash.toHex();
                 正常的使用MD5:   MD5Hash mh=new Md5Hash("123");
                 使用MD5+salt处理
                 Md5Hash md5Hash1=new Md5Hash("123","C=X0*7ps");
                 使用MD5+salt+hash散列 
                 Md5Hash md5Hash1=new Md5Hash("123","C=X0*7ps",1024);
                 使用算法(配置使用Md5算法)+认证中使用salt(在自定义clam中使用)+ hash散列(配置使散列) 
                 -----认证流程完毕-----
              10.shrio中的授权
                  授权可理解who(主体Subject)对what(which 资源Resource)进行how操作 ,三W对象。
                  有权限就有资源(认证之后  授权过程)           
                  授权方式:(1) 基于角色的访问控制 (2)基于资源的访问控制                       
                                    if(subject.hasRole("admin)){ 操作什么资源 }   if(subject.isPermission("user:find:*")){          }(资源类型)           (user:*:01 资源实例)
                  权限字符串:权限字符串的规则是:资源标识符:操作:资源实例标识符
                  用户创建权限:user:create,或user:create:*     用户修改实例001的权限:user:update:001      用户实例001的所有权限:user:*:001
                11.shiro的授权实现(TestCustomerRealmAuthenticato和CustomerTealm配合使用)
                    在TestCustomerRealmAuthenticator(另一个CustomerMd5Realm、CustomerTealm)中,认证之下写授权
                    if(subject.isAuthenticated()){    基于角色授权
                                                                   基于多角色权限控制
                                                                   是否具有其中一个角色
                                                              }
                    根据身份信息 用户名 获取 当前用户的角色信息,以及权限信息
                    基于权限字符串的访问控制  资源标识符:操作:资源类型
                 12.shiro整合springboot整合思路
                      ShiroFilter处理所有请求(认证授权)
                      ShiroFilter--SecurityManage--Realm认证通过之后然后才可访问
                 13. shiro整合springboot之环境搭配
                       配置系统受限资源
                       
                       配置系统公共资源
                  15.shiro整合springboot实现项目中认证和退出(shiro配置、使用、自制Realm---UserController、*CustomerRealm*、ShiroConfig、login.jsp、index.jsp---一个过滤器)
                        常见过滤器
                        anno、authc
                        使用shiro,先获取主体对象
                        Subject subject = SecurityUtils.getSubject();
                        <from action="${pageContext.request.contestPate}/user/login" method="post"></from>
                   16.shiro连接数据库完成基于MD5+Salt的注册功能
                         重要步骤:在service层中调用工具类(Saltutiles 生成盐),然后运用user.Setsalt(salt);
                         Md5Hash md5Hash= new Md5Hash(user.getPassword,salt,hashIterations:1024);
                         然后保存到数据库,即完成连接,完成用户注册
                   17.连接数据库认证功能
                          Realm根据用户名查询认证方法:

3.18 thymeleaf和项目熟悉
Springboot返回视图和参数:string 返回视图,ModelAndView :return ModelAndView(“success”),@ResponseBody:返回json数据,ModeAndView:return mv 返回视图与参数
(1) thymeleaf:
1
张三
zhangsan
20
<td th:text=" u s e r . s e x " = = 1 ? ′ 男 ′ : ′ 女 ′ > 男 < / t d > < t d t h : t e x t = " {user.sex}"==1?'男':'女'>男</td> <td th:text=" user.sex"==1?:></td><tdth:text="{#dates.format{user.birthday,‘yyyy-MM-dd’}}">1980-02-30

如果user.id有值会覆盖1,如果没有则是默认值
(2) 常用标签:
标签 作用 示例
th:id 替换id
th:text 文本替换

bigsai


th:utext 支持html的文本替换

content


th:object 替换对象

th:value 替换值
th:each 迭代
th:href 替换超链接 超链接
th:src 替换资源
(3)链接表达式:@{。。。。} 
            引入css:<link rel="stylesheet" th:href="@{index.css}">
引入JavaScript:<script type="text/javascript"  th:src="@{index.js}"></script>
超链接:<a th:href="@{index.html)">超链接</a>

         	 (request.setAttribute("","")传到前台参       request.getRequestDispatcher(url).forward(request,reponser)专向       
model.addAttribute("","") 传到前台参数 
            音乐思路:request.getParameter("name").trim();接受参数 返回jsonObject
            anfingpingtai思路:    修改保存接口参数AfSktest afsktest;)              
 JavaScript复习:  1.1 定义:可以不经过定义直接使用
             1.2 变量类型:数字型、布尔型、字符串、数组
                         document.getElementById(id).style.property=new style.    

3.19 总结自己增加Test功能和继续学习shiro
前期准备:在菜单管理上加入目录----加入菜单----加入按钮
1.在类上方加入@RequsetMapping(“system/sktest”)设置前缀
2.定义一个String prifix=" [前缀] "
3.设定view,GetMapping(),定义一个方法返回视图(String),并且返回 peifix+"/sktest"
lsit、add、edit、remove

          	查询(List):List<AfSktest> 返回类型TableDataInfo,return getDataTable(list);
sktest.html:

          	新增:先定义一个GetMapping("/add") 主要作用返回增加页面视图,后新增保存@PostMapping("/add")	
,toAjax判断,AjaxResult接受

修改:先定义一个GetMapping("/edit/{id}) 接口参数 id,ModelMap modelMap(用户接受并传递根据id查询到的数据),
修改保存数据,调用service操作。

删除:mapper: deleteSktestByIds(string[] ids),
         mapper.xml:<delete id="">
	delete from af_sktest id in 
	  <froeach clooection="array" item="id" open="(" separator="," close=")">
	       #{id}
	  </foreach>
	</delete>
          	 service:调用Mapper时,要进行强制转换 Convert.toStrArray(ids)
      	 cotroller:@PostMappings
      
Shiro学习
            17.shiro:连接数据库并认证
    	        给realm注入工厂(因为不能直接用service,需要在工厂中获取service),ApplicationContextUtils implements ApplicationContextAware
然后SimpleAuthenticationInfo(user.getUsername,密码,盐)
         在shrio配置中,修改凭证效验匹配器,加上盐和散列错误。
18.shiro:授权(shiro配置、使用、自制Realm---UserController、*CustomerRealm*、ShiroConfig、login.jsp、index.jsp---ApplicationContextUtils一个过滤器)
	在CustomerRealm中配置认证:获取身份信息--AuthorizationInfo
	**在html中引入shiro标签,使用shiro标签:<shiro:hasRole name="admin"><shiro:hasRole>
	多种权限<shiro:hasAnyRoles></shiro:hasAnyRoles> 
	通过hasPermission(权限字符串的管理)   user:*:* user下的所有资源,所有操作
	@RequiresRoles("")同时具有       @RequiesPermissions("")
19.授权数据的数据库获取(一)
设计
	用户------》角色-------》权限-------》资源(常用)
	用户------》角色
	用户------》权限
	用户------》角色
	用户------》权限
设计数据库:用户表  角色表  权限表          
	用户与角色与权限表都是多对多的关系,用户表   和    角色表  ------》中间表 用户角色表
				          角色表   和    权限表------》中间表	角色权限表
	select u.* ,r.* from t_user u left join t_user_role ur on u.id=ur.userid
	left join t_role r on ur.roleid=r.id
	where u.username='xiaochen'(查询xiaochen 的user表中的全部信息 和 其对应的 角色,,,先通过中间表查询到对应的roleid集合,   再通过roleid查询到   role表中对应的id和name)

20.授权数据的数据库获取(二)
用户中实体中定义角色集合,角色实体类中定义权限集合
根据角色的id拿到不同的权限集合 UserDao://根据用户名查询所有角色     //根据角色id查询权限集合
	select p.id,p.name,p.url,r.name from t_role r  left join t_role_perms rp on r.id=rp.id
	join t_perms p on rp.id=p.id
	where r.id='';(根据中间表 查询到角色对应的权限id集合  然后在权限表中查询出来)
            拿到角色之后查询权限信息(CustomerRealm)
	在AuthorizationInfo  doGetAuthorizationInfo配置类中配置
认证和授权基本流程完毕
21.shiro整合SpringBoot缓存之Ehcahe使用
	缓存:计算机内存中的一段数据。	作用:用来减轻DB的访问压力,从而提高系统的查询效率
	哪些数据适合加入缓存,哪些数据不适合放入缓存
企业一般用redies做缓存,做成分布式缓存。
**引入依赖--ShiroConfig开启缓存管理(开启全局缓存、开启认证的缓存、指定名字、开启授权缓存、指定名字)
22.shiro整合SpringBoot使用Redis作为缓存实现
**引入依赖--properties配置--创建RedisCacheManage--RedisCache
24.shiro整合springboot之图片验证
25.shiro整合thymeleaf
**引入依赖--shiroConfig--CustomerRealms--
th:action="@{/user/login}"  th:src=@{///} th:href=@{///]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值