黑马程序员技术交流社区
标题: 【郑州校区】Java的新项目学成在线笔记-day17(一) [打印本页]
作者: 谷粒姐姐 时间: 2019-6-25 15:04
标题: 【郑州校区】Java的新项目学成在线笔记-day17(一)
1.1 用户认证流程分析
用户认证流程如下:
业务流程说明如下:
1、客户端请求认证服务进行认证。
2、认证服务认证通过向浏览器cookie写入token(身份令牌)
认证服务请求用户中心查询用户信息。
认证服务请求Spring Security申请令牌。 认证服务将token(身份令牌)和jwt令牌存储至redis中。 认证服务向cookie写入 token(身份令牌)。
3、前端携带token请求认证服务获取jwt令牌 前端获取到jwt令牌并存储在sessionStorage。
前端从jwt令牌中解析中用户信息并显示在页面。
4、前端携带cookie中的token身份令牌及jwt令牌访问资源服务 前端请求资源服务需要携带两个token,一个是cookie中的身份令牌,一个是http header中的jwt令牌
前端请求资源服务前在http header上添加jwt请求资源
5、网关校验token的合法性
用户请求必须携带token身份令牌和jwt令牌 网关校验redis中token是否合法,已过期则要求用户重新登录
6、资源服务校验jwt的合法性并完成授权 资源服务校验jwt令牌,完成授权,拥有权限的方法正常执行,没有权限的方法将拒绝访问。
1.2 认证服务查询数据库 1.2.1 需求分析
认证服务根据数据库中的用户信息去校验用户的身份,即校验账号和密码是否匹配。
认证服务不直接连接数据库,而是通过用户中心服务去查询用户中心数据库。
1.2.2 搭建环境 1.2.2.1 创建用户中心数据库
用户中心负责用户管理,包括:用户信息管理、角色管理、权限管理等。
创建xc_user数据库(MySQL)
导入xc_user.sql(已导入不用重复导入)
1.2.4 查询用户接口
完成用户中心根据账号查询用户信息接口功能。 1.2.4.1 Api接口
用户中心对外提供如下接口:
1、响应数据类型
此接口将来被用来查询用户信息及用户权限信息,所以这里定义扩展类型
[AppleScript] 纯文本查看 复制代码
@Data @ToString public class XcUserExt extends XcUser {
//权限信息
private List<XcMenu> permissions;
//企业信息
private String companyId; }
2、根据账号查询用户信息
[AppleScript] 纯文本查看 复制代码
@Api(value = "用户中心",description = "用户中心管理") public interface UcenterControllerApi { public XcUserExt getUserext(String username); }
1.2.4.2 DAO
添加XcUser、XcCompantUser两个表的Dao
[AppleScript] 纯文本查看 复制代码
public interface XcUserRepository extends
JpaRepository<XcUser, String> {
XcUser findXcUserByUsername(String username);
}
public interface XcCompanyUserRepository extends JpaRepository<XcCompanyUser,String> {
//根据用户id查询所属企业id
XcCompanyUser findByUserId(String userId);
}
1.2.4.2 Service
[AppleScript] 纯文本查看 复制代码
@Service public class UserService {
@Autowired
private XcUserRepository xcUserRepository;
//根据用户账号查询用户信息
public XcUser findXcUserByUsername(String username){
return xcUserRepository.findXcUserByUsername(username);
}
//根据账号查询用户的信息,返回用户扩展信息
public XcUserExt getUserExt(String username){
XcUser xcUser = this.findXcUserByUsername(username);
if(xcUser == null){
return null;
[AppleScript] 纯文本查看 复制代码
}
XcUserExt xcUserExt = new XcUserExt();
BeanUtils.copyProperties(xcUser,xcUserExt);
//用户id
String userId = xcUserExt.getId();
//查询用户所属公司
XcCompanyUser xcCompanyUser = xcCompanyUserRepository.findXcCompanyUserByUserId(userId);
if(xcCompanyUser!=null){
String companyId = xcCompanyUser.getCompanyId();
xcUserExt.setCompanyId(companyId);
}
return xcUserExt;
} }
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |