目录
实现
主要理解一下这个项目中是如何实现权限的认证和鉴权的,以及shrio的@RequiresPermissions注解,
controller层
根据登录操作传入用户信息,然后根据ID生成信息返回给前端的一个token,前端拿到这个token之后,后面的请求都会带着这个token。
src/main/java/io/renren/modules/sys/controller/SysLogController.java
/**
* 登录
*/
@PostMapping("/sys/login")
public Map<String, Object> login(@RequestBody SysLoginForm form)throws IOException {
boolean captcha = sysCaptchaService.validate(form.getUuid(), form.getCaptcha());
if(!captcha){
return R.error("验证码不正确");
}
//用户信息
SysUserEntity user = sysUserService.queryByUserName(form.getUsername());
//账号不存在、密码错误
if(user == null || !user.getPassword().equals(new Sha256Hash(form.getPassword(), user.getSalt()).toHex())) {
return R.error("账号或密码不正确");
}
//账号锁定
if(user.getStatus() == 0){
return R.error("账号已被锁定,请联系管理员");
}
//生成token,并保存到数据库
R r = sysUserTokenService.createToken(user.getUserId());
return r;
}
登录后,前端界面获得的token,前端项目写的也是每次请求的时候都会带着这个token。

Config 认证和鉴权
认证是在登录的时候调用,鉴权是在调用其他接口的时候使用。
在ShiroConfig配置中。重新自定义了realm对象和过滤器OAuth2Filter,以前前后端未分离通过密码来认证,现在前后端分离通过token来认证。
src/main/java/io/renren/config/ShiroConfig.java
/**
* Copyright (c) 2016-2019 人人开源 All rights reserved.
*
* https://www.renren.io
*
* 版权所有,侵权必究!
*/
package io.renren.config;
import io.renren.modules.sys.oauth2.OAuth2Filter;
import io.renren.modules.sys.oauth2.OAuth2Realm;
import org.apache.shiro.mgt.SecurityManager<

本文介绍了一个使用Shiro实现权限管理的项目案例,包括登录认证、权限校验流程及关键代码解析。
最低0.47元/天 解锁文章
1101

被折叠的 条评论
为什么被折叠?



