java antd实现登录_Spring WebFlux + React搭建后台管理系统(3): antd pro v5实现登入登出...

antdpro是蚂蚁金服开发的后台管理框架模板,继承了许多组建,可以满足快速开发,组建使用的antd,组建种类比较多,功能比较全,设计也挺好看的,但是封装程度有点高,用起来可能不是很灵活,一些功能需要研究一下。

1. 创建antd项目

1.1 命令行键入:

yarn create umi

ac87c8cf2b74e1233253be4f52457c69.png

1.2 选择Pro v5:

d56f0b5ba407b93a01569036dbda6e10.png

这时项目文件全部拉下来了:

94b879e2b15ee566a808c3842643b936.png

1.3 下载依赖

通过yarn下载,时间会比较长

yarn

9a0cf176fc1404679af88cc32176b277.png

1.4 运行项目

通过键入yarn start启动项目

04a985299d4e64484912f918e32c2804.png

通过浏览器访问,不要用ie,可见项目界面:

aa64b8de063fb52f497f4ac2a3fac323.png

2. 登入实现

由于使用initialState, v5的login和v4的login的一些文件功能位置发生了变化,之前用的dva,现在也没了。

2.1 修改login的页面

找到login的页面以及功能页面

3067520433f2a56a5b04dcfa3aa46da8.png

登录页面修改:只需要用户密码登录

const Login: React.FC = () => {

const [userLoginState, setUserLoginState] = useState({});

const [submitting, setSubmitting] = useState(false);

const { refresh} = useModel('@@initialState');

const handleSubmit = async (values: LoginParamsType) => {

setSubmitting(true);

try {

// 登录

const msg = await accountLogin({ ...values, type: 'account'});

if (msg.status === 200) {

message.success('登录成功!');

localStorage.setItem("token", msg.data.token);

localStorage.setItem("user", JSON.stringify(msg.data));

replaceGoto();

setTimeout(() => {

refresh();

}, 0);

return;

}

// 如果失败去设置用户错误信息

setUserLoginState({status: msg.status, type: 'account'});

} catch (error) {

message.error('登录失败,请重试!');

}

setSubmitting(false);

};

const { status, type: loginType } = userLoginState;

return (

className={styles.logo}

src="https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1597756619654&di=614e6457d19facc70fc19d1a870fd65b&imgtype=0&src=http%3A%2F%2F09.imgmini.eastday.com%2Fmobile%2F20170805%2F20170805232157_105785d2963bb49429d4e5d92acb0368_7.jpeg"

alt="冰封王座"/>

{status === 'error' && loginType === 'account' && !submitting && (

)}

name="username"

placeholder="用户名: admin"

rules={[

{

required: true,

message: '请输入用户名!',

},

]}

/>

name="password"

placeholder="密码: admin"

rules={[

{

required: true,

message: '请输入密码!',

},

]}

/>

登录

);

};

通过accountLogin 方法登录获得token,以及用户信息

将token和用户信息放到localStorage中

跳转到之前页面或者 /页面

刷新刷新initialState,更新登录信息

2.2 添加login访问api服务

使用umi的request方法进行访问

注意文件位置

接口实现可以看一下之前系列文章

abe4df0633842afcc0b54ac5a333159b.png

2.3 修改getInitialState方法

由于登录,鉴权都要使用getInitialState,默认方法CurrentUser中存放的是一个默认人的信息,需要变更为登录访问返回的个人信息:

该方法存在根目录的app.tsx中,修改如下:

为了配合CurrentUser使用可以把api传过来的字段名改一下

获取登入存储在localStorage中的user写入currentUser中

export async function getInitialState(): Promise

currentUser?: API.CurrentUser;

settings?: LayoutSettings;

}> {

// 如果是登录页面,不执行

if (history.location.pathname !== '/user/login') {

try {

const currentUser:API.CurrentUser = JSON.parse(localStorage.getItem('user')||'');

currentUser.access = currentUser.roles;

return {

currentUser,

settings: defaultSettings,

};

} catch (error) {

history.push('/user/login');

}

}

return {

settings: defaultSettings,

};

}

2.4 修改CurrentUser

为了配合使用,将原来的currentuser添加或修改了一些字段

添加mobile

添加token

添加roles

修改access类型为array,目前roles中和access中内容一样,之后有可能通过map获取access

819db8c50fdbffe342a303c9054443f9.png

2.5 修改鉴权功能

新版本鉴权通过access.ts文件完成鉴权逻辑

修改access方法

由于access已经让我改成列表,判断逻辑需要修改

a7b96bac5beacde21454a7d591f2788a.png

到这里登录的过程就基本完成了。

3.登出实现:

登出的实现比较简单,下图为登出方法所在位置

ee2ab99ef99be7a46b47f018d61d66e7.png

修改loginout方法如下:

通过api将redis中token删除

删除掉localStorage中的token和user,这样getInitialState无法获取CurrentUser自然无法访问其他页面

69dc5db5744492a7aab61310e9a422a6.png

outLogin方法修改

export async function outLogin(token: string) {

return request('http://localhost:8080/api/auth/logout', {

method: 'GET',

params: {token},

}).then((response) => {

return response;

}).catch((error) => {

console.log(error);

});

}

4. 测试

7d221c8e6dddfaba3f362c8ebb648190.gif

5. 项目代码

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值