mall整合SpringSecurity和JWT实现认证和授权(二)

https://github.com/macrozheng/mall


登录注册功能实现

UmsAdminController类

实现了后台用户登录、注册及获取权限的接口

/*** 后台用户管理*/
@Controller
@Api(tags = "UmsAdminController", description = "后台用户管理")
@RequestMapping("/admin")
public class UmsAdminController {@Autowiredprivate UmsAdminService adminService;@Value("${jwt.tokenHeader}")private String tokenHeader;@Value("${jwt.tokenHead}")private String tokenHead;@ApiOperation(value = "用户注册")@RequestMapping(value = "/register", method = RequestMethod.POST)@ResponseBodypublic CommonResult<UmsAdmin> register(@RequestBody UmsAdmin umsAdminParam, BindingResult result) {UmsAdmin umsAdmin = adminService.register(umsAdminParam);if (umsAdmin == null) {CommonResult.failed();}return CommonResult.success(umsAdmin);}@ApiOperation(value = "登录以后返回token")@RequestMapping(value = "/login", method = RequestMethod.POST)@ResponseBodypublic CommonResult login(@RequestBody UmsAdminLoginParam umsAdminLoginParam, BindingResult result) {String token = adminService.login(umsAdminLoginParam.getUsername(), umsAdminLoginParam.getPassword());if (token == null) {return CommonResult.validateFailed("用户名或密码错误");}Map<String, String> tokenMap = new HashMap<>();tokenMap.put("token", token);tokenMap.put("tokenHead", tokenHead);return CommonResult.success(tokenMap);}@ApiOperation("获取用户所有权限(包括+-权限)")@RequestMapping(value = "/permission/{adminId}", method = RequestMethod.GET)@ResponseBodypublic CommonResult<List<UmsPermission>> getPermissionList(@PathVariable Long adminId) {List<UmsPermission> permissionList = adminService.getPermissionList(adminId);return CommonResult.success(permissionList);}
}

添加UmsAdminService接口

/*** 后台管理员Service*/
public interface UmsAdminService {/*** 根据用户名获取后台管理员*/UmsAdmin getAdminByUsername(String username);/*** 注册功能*/UmsAdmin register(UmsAdmin umsAdminParam);/*** 登录功能* @param username 用户名* @param password 密码* @return 生成的JWT的token*/String login(String username, String password);/*** 获取用户所有权限(包括角色权限和+-权限)*/List<UmsPermission> getPermissionList(Long adminId);
}

添加UmsAdminServiceImpl类

/*** UmsAdminService实现类*/
@Service
public class UmsAdminServiceImpl implements UmsAdminService {private static final Logger LOGGER = LoggerFactory.getLogger(UmsAdminServiceImpl.class);@Autowiredprivate UserDetailsService userDetailsService;@Autowiredprivate JwtTokenUtil jwtTokenUtil;@Autowiredprivate PasswordEncoder passwordEncoder;@Value("${jwt.tokenHead}")private String tokenHead;@Autowiredprivate UmsAdminMapper adminMapper;@Autowiredprivate UmsAdminRoleRelationDao adminRoleRelationDao;@Overridepublic UmsAdmin getAdminByUsername(String username) {UmsAdminExample example = new UmsAdminExample();example.createCriteria().andUsernameEqualTo(username);List<UmsAdmin> adminList = adminMapper.selectByExample(example);if (adminList != null && adminList.size() > 0) {return adminList.get(0);}return null;}@Overridepublic UmsAdmin register(UmsAdmin umsAdminParam) {UmsAdmin umsAdmin = new UmsAdmin();BeanUtils.copyProperties(umsAdminParam, umsAdmin);umsAdmin.setCreateTime(new Date());umsAdmin.setStatus(1);//查询是否有相同用户名的用户UmsAdminExample example = new UmsAdminExample();example.createCriteria().andUsernameEqualTo(umsAdmin.getUsername());List<UmsAdmin> umsAdminList = adminMapper.selectByExample(example);if (umsAdminList.size() > 0) {return null;}//将密码进行加密操作String encodePassword = passwordEncoder.encode(umsAdmin.getPassword());umsAdmin.setPassword(encodePassword);adminMapper.insert(umsAdmin);return umsAdmin;}@Overridepublic String login(String username, String password) {String token = null;try {UserDetails userDetails = userDetailsService.loadUserByUsername(username);if (!passwordEncoder.matches(password, userDetails.getPassword())) {throw new BadCredentialsException("密码不正确");}UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities());SecurityContextHolder.getContext().setAuthentication(authentication);token = jwtTokenUtil.generateToken(userDetails);} catch (AuthenticationException e) {LOGGER.warn("登录异常:{}", e.getMessage());}return token;}@Overridepublic List<UmsPermission> getPermissionList(Long adminId) {return adminRoleRelationDao.getPermissionList(adminId);}
}

修改Swagger的配置

通过修改配置实现调用接口自带Authorization头,这样就可以访问需要登录的接口了。

private List<ApiKey> securitySchemes() {//设置请求头信息List<ApiKey> result = new ArrayList<>();ApiKey apiKey = new ApiKey("Authorization", "Authorization", "header");result.add(apiKey);return result;}private List<SecurityReference> defaultAuth() {List<SecurityReference> result = new ArrayList<>();AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];authorizationScopes[0] = authorizationScope;result.add(new SecurityReference("Authorization", authorizationScopes));return result;}

给PmsBrandController接口中的方法添加访问权限

  • 给查询接口添加pmsread权限
  • 给修改接口添加pmsupdate权限
  • 给删除接口添加pmsdelete权限
  • 给添加接口添加pmscreate权限
@PreAuthorize("hasAuthority('pms:brand:read')")
public CommonResult<List<PmsBrand>> getBrandList() {return CommonResult.success(brandService.listAllBrand());
}

GitHub开源项目学习 电商系统Mall (五) mall整合SpringSecurity和JWT实现认证和授权(二)相关推荐

  1. GitHub开源项目学习 电商系统Mall (四) mall整合SpringSecurity和JWT实现认证和授权(一)

    mall整合SpringSecurity和JWT实现认证和授权(一) https://github.com/macrozheng/mall 跳过了官方Learning中较简单的Swagger-UI的实 ...

  2. GitHub开源项目学习 电商系统Mall (三) SpringBoot+MyBatis搭建基本骨架

    mysql数据库环境搭建 下载并安装mysql5.7版本 设置数据库账号密码 创建数据库mall 导入Mall数据库脚本 https://github.com/macrozheng/mall-lear ...

  3. GitHub开源项目学习 电商系统Mall (二) Mac搭建Mall前后台环境

    Mac搭建Mall前后台环境 Docker环境安装 此处不赘述,本机安装docker ce version 19.03 https://www.runoob.com/docker/macos-dock ...

  4. 商城项目(三)整合SpringSecurity和JWT实现认证和授权

    整合SpringSecurity和JWT实现认证和授权 环境搭建 SpringSecurity JWT Hutool 项目使用表说明 ums_admin:后台用户表 ums_role:后台用户角色表 ...

  5. 解决测试失败问题:mall商城项目》mall整合SpringSecurity和JWT实现认证和授权(二)》改用其他有权限的帐号登录

    目录 原因 修改办法 原因 权限值不对 修改办法 1.打开数据库中的ums_admin表 2.复制id=1那一行的password,如下: 3.替换id=6那一行中的password,点击√,如下: ...

  6. likeshop100%开源免费商用电商系统,PC商城、H5商城、小程序商城、安卓APP商城、苹果APP商城全部100%开源,免费商用

    简介: 怎样是适合 能够通过开发文档部署文档,这是唯一的能力要求,上手非常简单.流畅. 使用宝塔部署,即可快速搭建PC商城.小程序商城.公众号H5商城.安卓APP.苹果APP. 如果你具备开发能力,也 ...

  7. SSM项目之电商系统-爱生鲜

    项目总结: 这是我的第一个SSM项目 也是我第一次系统的接触一个完整的框架,本项目分为前台和后台系统,分别是用户界面和管理员界面.主要技术为:Spring,Springmvc,mybatis,并且在前 ...

  8. Java项目:网上电商系统(java+SSM+mysql+maven+tomcat)

    源码获取:博客首页 "资源" 里下载! 一.项目简述 功能:本系统分用户前台和管理员后台. 前台展示+后台管理,前台界面可实现用户登录,用户注 册,商品展示,商品明细展示,用户信息 ...

  9. 前端学习(1868)vue之电商管理系统电商系统之登录退出实现表单的预先认证

    修改头像位置 3目录结构 router.js import Vue from 'vue' import Router from 'vue-router' import Login from './co ...

最新文章

  1. php+tcpdf+表格,PHP中使用TCPDF生成PDF文档实例
  2. java 容器限制大小,容器中的Java与内存限制:LXC、Docker与OpenVZ
  3. 记一次ubuntu阿里的下载源的问题
  4. java sqlite3查询慢_java连接数据库进行查询优化跑不通谁能帮我调下通
  5. 《C++ Primer》14.2.1节练习
  6. Flutter for Web 详细预研
  7. 接口测试工具--apipost如何取消json参数中转义字符
  8. 西瓜书+实战+吴恩达机器学习(四)监督学习之线性回归 Linear Regression
  9. Flink+Alink,当大数据遇见机器学习! 博文视点Broadview 前天
  10. WIN10 删除文件 找不到该项目
  11. joson_encode 处理
  12. 经纬财富:渭南炒现货白银的七条做单习惯
  13. Windows10 mysql解决MySQL服务无法启动 系统出错 发生系统错误 1067
  14. 墙外干货:如何通过风格指南驱动模块化交互设计
  15. 学习Java,是看书好还是看视频?
  16. php判断显示器横屏还是竖屏,判断横屏竖屏(三种)
  17. 解决ubuntu18.04下ibus-libpinyin 拼音无法选择除第一个的候选词问题以及中英文切换问题
  18. linux script 教程,linux下神奇的script命令,linuxscript命令
  19. PostgreSQL vacuum原理一功能与参数
  20. 专题·莫比乌斯函数与欧拉函数【including 整除分块,积性函数,狄利克雷卷积,欧拉函数,莫比乌斯函数,莫比乌斯反演

热门文章

  1. CP(Cyclic Prefix)循环前缀介绍
  2. 群发图文内容图片处理
  3. 一群机器狗亮相MIT,集体后空翻、踢足球,网友:去看黑镜压压惊
  4. 计算机软件项目经理资格,计算机软考有软件项目经理吗
  5. 跨境电商选品重要吗?
  6. 双十一已落幕,你是否总结过你的广告投放策略?
  7. 硬汉也有软柔情 浪潮软实力大揭秘
  8. CAN总线通信技术初识
  9. python实现九宫格华容道小游戏
  10. 圆形矩形梯形java,JAVA-打包三角型 梯形 圆形三个类,用一个程序执行入口对三类对象进行测试...