您的位置:首页 > 编程语言 > Java开发

基于(SpringMVC+DATAJpa+shiro )的用户管理系统学习的总结

2020-03-05 04:42 316 查看

基于(SpringMVC+DATAJpa+shiro )的用户管理系统学习的总结

1.父类的抽取

一、实体类父类的抽取:
抽取公共的属性,公共的主键ID,这个类是不用生成实体类的,所以需要打上一个映射父类的注解@MappedSuperclass,且在ID这个字段上打上@Id、@GeneratedValue表示id是主键并且主键生成策略是递增。

二、分页功能的实现:
JPA的查询筛选功能是通过一个对象(Specification)来完成的,我们可以通过一个jpa-spec的jar包来实现简单的操作,完成这个对象的设定,添加查询条件。抽取一个查询的父类,里面定义基本的分页字段,每个类继承这个父类完成分页的操作,然后每个实体类去继承他,添加特殊的分页,排序字段即可。

三、持久层的父类抽取:
JPA已经帮我们完成了增删改查的功能实现,我们只需要在持久层里面去定义接口,继承一个JpaRepository和序列化接口Serializable,因为我们要使用specification,所以需要多继承一个JpaSpecificationExecutor类。其他的持久层如果有多余的查询需求,只需要添加自己的查询功能就行。

四、服务层父类的抽取:
为了简化代码,减少重复的代码,使用父接口去继承序列化接口,子接口直接继承父接口就行了。

2.权限设置

一、自定义realm
采用自定义realm来定义权限框架的授权认证和密码认证,并且在shiro框架自带的session中存入当前登录用户的对象,方便我们后面进行操作。
二、密码的加密功能
专门定义一个类来完成加密的功能,里面设定好系统的加密的常数,并且在自定义realm中设定好加密的盐值,在配置这个自定义realm时设定加密方式和加密次数
三、权限数据的读取
我们专门定义一个类来提供权限数据,里面提供一个方法,从数据库中读取需要拦截的权限数据(权限数据的配置需要按顺序来,不然会出现有权限也拦截的情况),这个方法返回一个map格式的权限数据,因为要按顺序,所以需要返回linkedhashmap。

3.问题解决

一、出现没有会话的错误
因为设置懒加载后,出现了no session的错误,因为我们把jpa核心对象交给了spring管理,他会自动的管理jpa核心对象的创建和关闭,如果我们要查询外键的对象,那么就会查询完毕后,又重新请求查询,此时,jpa对象已经关闭,所以出现没有会话的错误。配置jpa对象的关闭,在我们访问controller结束后再执行
二、格式不匹配导致的json格式转换错误
如果是时间格式的对象传递给后台,我们需要在接收的方法set方法上打上一个@JsonFormat来设置接收的时间的格式,发送的时候打上一个@DateTimeFormat注解,并设置时区timezone = "GMT+8"。
三、配置双向多对一关系后出现栈溢出
查询语句出现重复查询,转换json的时候忽略其中一方就好了
四、出现oid改变的异常
因为修改数据是先查询了数据库,再做的修改,所以当有外键的时候,会查询出一个对象,而后修改这个对象的时候就会操作他的id。只需要清空这个外键对象,再重新添加外键id值就好了
  • 点赞
  • 收藏
  • 分享
  • 文章举报
H_Saki 发布了1 篇原创文章 · 获赞 0 · 访问量 10 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐