antdesign java_基于ant design pro和spring boot、shiro实现的通用管理系统(一)登录

对于java后端开发,写前端页面是非常痛苦的。技术全面点的能把东西做出来,但UI效果没法保证。技术不行的压根就搞不出来。支付宝开源的ant design简称antd虽然很好的解决了这个问题,但是更多的是被前端开发拿去提升效率。多数后端开发面对未知的学习成本,一般都懒得去了解。作为一名后端开发,我通过一周的学习,把之前做的一个java系统的ui全部用ant design pro重写。我想把这个过程总结一下,供更多的java后端开发人员学习。

在阅读下面的文章之前,推荐各位阅读一下ant design的官方文档,对基本的概念有所了解。

官方教程

登录页面文件位于:src\pages\User\Login.js

页面登录按钮点击事件代码:

handleSubmit = (err, values) => {

const { type } = this.state;

if (!err) {

const { dispatch } = this.props;

dispatch({

type: 'login/login',

payload: {

...values,

//type,

},

});

}

};

通过dva调用login相关的model中的方法(文件路径src\models\login.js)

*login({ payload }, { call, put }) {

const response = yield call(trainingAccountLogin, payload);

yield put({

type: 'changeLoginStatus',

payload: response,

});

// Login successfully

},

通过第二行 yield call 异步调用trainingAccountLogin方法,

通过model文件中的import引入api.js文件中的与java后台通信的方法

import { trainingAccountLogin, } from '@/services/api';

通过dva框架的封装,调用后端java方法变得异常简单。只需要下面几行代码就能完成一个ajax的异步请求,剩下的工作就是把传给后端的参数设置好。

export async function trainingAccountLogin(params) {

return request('/training/login/account', {

method: 'POST',

body: params,

});

}

这个过程中最重要的就是数据的流转,页面中用户输入的用户名和密码通过antd封装的组件传递到login页面的handleSubmit方法中,也就是values对象。values对象是ant design pro封装的Login组件控制的,点击submit后就把用户名和密码的输入框中的数据封装成一个json对象,格式如下:

{

username: "admin",

password: "123456"

}

这个json对象先被赋值给了values对象,通过handleSubmit方法放到payload对象中,然后调用dispatch方法、effect里的login方法,最后调用api中的trainingAccountLogin方法时,payload对象就通过参数传递变成了param对象。最后通过框架中的request方法发送到java后端处理。

传给后端的参数是param对象,这里可以是raw json,也可以是封装好的FromData。对应的后端代码有所不同,对于后端开发来收这不是问题,此处就不细讲。

//接收FormData的后端代码

@PostMapping("/login")

@ResponseBody

public ResponseBo login(String username, String password, String code, Boolean rememberMe)

//接收raw json的后端代码

@PostMapping("/login/account")

@ResponseBody

public ResponseBo login(@RequestBody User user)

数据发送到后端处理后,通过http的response返给前端处理。response的数据流跟request的正好相反,这些都是有dva控制,我们需要做的就是再model的代码里面处理返回的response。登录成功后,后端会返回如下的json结果

{"msg":"操作成功","code":0,"currentAuthority":"admin"}

前端这里只处理了code字段,只要code是0,就认为登录成功了,然后就做页面跳转。由于后端shiro是用的session验证,response里会将sessionid设置到cookie中,后续所有的请求都会自动带上cookie,java后端就认为这些请求是合法的请求。

//(文件路径template\src\models\login.js)

// Login successfully

if (response.code === 0) {

reloadAuthorized();

const urlParams = new URL(window.location.href);

const params = getPageQuery();

let { redirect } = params;

if (redirect) {

const redirectUrlParams = new URL(redirect);

if (redirectUrlParams.origin === urlParams.origin) {

redirect = redirect.substr(urlParams.origin.length);

if (redirect.match(/^\/.*#/)) {

redirect = redirect.substr(redirect.indexOf('#') + 1);

}

} else {

window.location.href = redirect;

return;

}

}

yield put(routerRedux.replace(redirect || '/'));

}

项目简介 Freeman是基于 Spring Boot2 + Spring data Jpa + Shiro + Vue2 + JWT 的前后端分离的敏捷开发框架;以Spring Framework为核心容器,Spring data Jpa(Hibernate实现)为数据访问层, Apache Shiro为权限框架,Redis对常用数据进行缓存,前端使用Vue全家桶,前后端分离、JWT鉴权的开源框架。 角色的功能权限控制方式为基于RBAC规范的Shiro,角色数据范围控制是根据用户的所属机构、数据的创建者(用户ID)实现。项目支持前端菜单动态路由。前后端交互使用JWT验证权限,使用Redis调用lua脚本CAS的方式,并且在令牌刷新时,旧令牌续命30秒进行平滑过渡,丝般顺滑地达到了用户无感知动态刷新JWT的目的。 jpa`动态条件查询写起来麻烦`,`项目的逻辑复杂的时候,代码冗长、sql逻辑不直观`的坑,我想努力填一下,这是我写这个项目的初衷。 已内置很多优秀的基础功能和高效的 工具,包括:系统权限组件、数据权限组件、数据字典组件等。前端界面风格采用了阿里开源的`ant-design-vue`框架。密码加密、访问验证、数据权限验证。使用Maven做项目管理,提高项目的易开发性、扩展性。 目前功能模块代码生成器、权限框架、数据字典、数据缓存、数据监控、计划任务、多数据源管理、类似mybatis动态SQL、短信发送、邮件发送、统计功能等功能。 #### 技术特点 使用目前流行的WEB开发架构技术,如 SpringBoot,Mybatis, jpa(Hibernate),Apache Shiro ,JWT 等等,目前仅保证对MySQL数据库的完美支持。 分层设计:使用分层设计,分为dao,service,Controller,低耦合,高内聚。 #### 安全考虑 严格遵循了web安全的规范,前后端交互使用了JWT,参数编码传输,密码md5加密存储,shiro权限验证,XSS统一过滤器。 #### 令牌刷新方式 前端axios请求拦截器自动把令牌放入head,axios响应拦截器中检查有`newToken`标记,有就更新保存的令牌。后端shiro拦截需要权限的接口,每次都拿到JWT进行认证。采用CAS机制+刚过期令牌续期30秒,实现用户无感知刷新, 并且在令牌过期时大量并发请求不会出错。 ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值