北京哪些扁平疣医院好 https://m-mip.39.net/baidianfeng/mipso_8813050.html
SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了SpringIoC,DI(控制反转InversionofControl,DI:DependencyInjection依赖注入)和AOP(面向切面编程)功能,为应用系统提供声明式的安全访问控制功能,减少了为企业系统安全控制编写大量重复代码的工作。
它是一个轻量级的安全框架,它确保基于Spring的应用程序提供身份验证和授权支持。它与SpringMVC,Springboot有很好地集成,并配备了流行的安全算法实现捆绑在一起。安全主要包括两个操作“认证”与“验证”(有时候也会叫做权限控制)。“认证”是为用户建立一个其声明的角色的过程,这个角色可以一个用户、一个设备或者一个系统。“验证”指的是一个用户在你的应用中能够执行某个操作。
SpringSecurity核心功能
认证(你是谁)
授权(你能干什么)
攻击防护(防止伪造身份)
Jsonwebtoken(JWT),是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。
验证流程
创建sys_user,sys_role,sys_menu,sys_user_role,sys_role_menu,
sys_user_detail表
SETNAMESutf8mb4;SETFOREIGN_KEY_CHECKS=0;--------------------------------Tablestructureforsys_menu------------------------------DROPTABLEIFEXISTS`sys_menu`;CREATETABLE`sys_menu`(`menu_id`int(0)NOTNULLAUTO_INCREMENTCOMMENT权限主键,`menu_name`varchar()CHARACTERSETutf8COLLATEutf8_binNOTNULLCOMMENT权限名称,`menu_permission`varchar()CHARACTERSETutf8COLLATEutf8_general_ciNOTNULLCOMMENT权限表达式,`path`varchar()CHARACTERSETutf8COLLATEutf8_general_ciNULLDEFAULTNULLCOMMENT前端跳转路径,`parent_id`int(0)NOTNULLDEFAULT0COMMENT父级id为0为根目录,`menu_icon`varchar()CHARACTERSETutf8COLLATEutf8_general_ciNULLDEFAULTNULLCOMMENT目录icon,`menu_type`int(0)NOTNULLDEFAULT0COMMENT菜单类型(类型0:目录1:菜单2:按钮),`del_flag`tinyint(1)NOTNULLDEFAULT0COMMENT删除标记0为未删除1为删除,`create_time`datetime(0)NULLDEFAULTNULLCOMMENT创建时间,`create_user`int(0)NULLDEFAULTNULLCOMMENT创建用户,`update_time`datetime(0)NULLDEFAULTNULLCOMMENT修改时间,`update_user`int(0)NULLDEFAULTNULLCOMMENT修改用户,`tenant_id`int(0)NULLDEFAULTNULLCOMMENT预留租户id,PRIMARYKEY(`menu_id`)USINGBTREE)ENGINE=InnoDBAUTO_INCREMENT=11CHARACTERSET=utf8COLLATE=utf8_general_ciROW_FORMAT=Dynamic;--------------------------------Tablestructureforsys_role------------------------------DROPTABLEIFEXISTS`sys_role`;CREATETABLE`sys_role`(`role_id`int(0)NOTNULLAUTO_INCREMENTCOMMENT角色主键,`role_name`varchar()CHARACTERSETutf8COLLATEutf8_general_ciNOTNULLCOMMENT角色名称,`role_description`varchar()CHARACTERSETutf8COLLATEutf8_general_ciNULLDEFAULTNULLCOMMENT角色描述,`role_code`varchar()CHARACTERSETutf8COLLATEutf8_general_ciNOTNULLCOMMENT角色编码,`del_flag`tinyint(1)NOTNULLDEFAULT0COMMENT删除标记,`default_role`tinyint(1)NOTNULLDEFAULT0COMMENT默认角色1为默认0为普通,`tenant_id`int(0)NULLDEFAULTNULLCOMMENT预留租户id,`create_time`datetime(0)NULLDEFAULTNULLCOMMENT创建时间,`create_user`int(0)NULLDEFAULTNULLCOMMENT创建用户,`update_time`datetime(0)NULLDEFAULTNULLCOMMENT修改时间,`update_user`int(0)NULLDEFAULTNULLCOMMENT修改用户,PRIMARYKEY(`role_id`)USINGBTREE)ENGINE=InnoDBAUTO_INCREMENT=2CHARACTERSET=utf8COLLATE=utf8_general_ciROW_FORMAT=Dynamic;--------------------------------Tablestructureforsys_role_menu------------------------------DROPTABLEIFEXISTS`sys_role_menu`;CREATETABLE`sys_role_menu`(`id`int(0)NOTNULLAUTO_INCREMENTCOMMENT主键标识,`role_id`int(0)NOTNULLCOMMENT角色id,`menu_id`int(0)NOTNULLCOMMENT权限id,PRIMARYKEY(`id`)USINGBTREE)ENGINE=InnoDBAUTO_INCREMENT=8CHARACTERSET=utf8COLLATE=utf8_general_ciROW_FORMAT=Dynamic;--------------------------------Tablestructureforsys_user------------------------------DROPTABLEIFEXISTS`sys_user`;CREATETABLE`sys_user`(`user_id`int(0)NOTNULLAUTO_INCREMENTCOMMENT用户主键,`login_name`varchar()CHARACTERSETutf8COLLATEutf8_binNOTNULLCOMMENT用户登录名称,`password`varchar()CHARACTERSETutf8COLLATEutf8_binNOTNULLCOMMENT用户登录密码,`user_status`varchar()CHARACTERSETutf8COLLATEutf8_binNOTNULLDEFAULTNORMALCOMMENT用户账号状态,`tenant_id`int(0)NULLDEFAULTNULLCOMMENT预留租户id,`registered_time`datetime(0)NULLDEFAULTCURRENT_TIMESTAMP(0)COMMENT注册时间,PRIMARYKEY(`user_id`)USINGBTREE)ENGINE=InnoDBAUTO_INCREMENT=14CHARACTERSET=utf8COLLATE=utf8_general_ciROW_FORMAT=Dynamic;--------------------------------Tablestructureforsys_user_detail------------------------------DROPTABLEIFEXISTS`sys_user_detail`;CREATETABLE`sys_user_detail`(`user_detail_id`int(0)NOTNULLAUTO_INCREMENTCOMMENT用户详情主键,`user_id`int(0)NOTNULLCOMMENT对应用户的id,`user_name`varchar()CHARACTERSETutf8COLLATEutf8_binNOTNULLCOMMENT用户名称,`nick_name`varchar()CHARACTERSETutf8COLLATEutf8_binNULLDEFAULTNULLCOMMENT用户昵称如果没有昵称则名称为昵称,`user_detail_img`varchar()CHARACTERSETutf8COLLATEutf8_binNULLDEFAULTNULLCOMMENT用户头像,`user_detail_tel`varchar(50)CHARACTERSETutf8COLLATEutf8_general_ciNOTNULLCOMMENT用户手机号,`user_detail_sex`tinyint(1)NOTNULLDEFAULT1COMMENT用户性别true为男false为女,`user_detail_address`varchar()CHARACTERSETutf8COLLATEutf8_binNULLDEFAULTNULLCOMMENT用户通信地址,`user_detail_mail`varchar()CHARACTERSETutf8COLLATEutf8_general_ciNULLDEFAULTNULLCOMMENT用户邮箱,`shop_id`int(0)NULLDEFAULTNULLCOMMENT用户所在门店id,PRIMARYKEY(`user_detail_id`)USINGBTREE)ENGINE=InnoDBAUTO_INCREMENT=2CHARACTERSET=utf8COLLATE=utf8_general_ciROW_FORMAT=Dynamic;--------------------------------Tablestructureforsys_user_role------------------------------DROPTABLEIFEXISTS`sys_user_role`;CREATETABLE`sys_user_role`(`id`int(0)NOTNULLAUTO_INCREMENTCOMMENT主键标示,`user_id`int(0)NOTNULLCOMMENT用户id,`role_id`int(0)NOTNULLCOMMENT角色id,PRIMARYKEY(`id`)USINGBTREE)ENGINE=InnoDBAUTO_INCREMENT=2CHARACTERSET=utf8COLLATE=utf8_general_ciROW_FORMAT=Dynamic;SETFOREIGN_KEY_CHECKS=1;
根据上篇文档整合MP的自动生成代码
springboot教程之整合Mybatis-Plus
UserController
RestControllerRequestMapping("/user")publicclassUserController{privatefinalRedisOperatorredisOperator;publicUserController(RedisOperatorredisOperator){this.redisOperator=redisOperator;}ApiOperation("获取验证码")GetMapping(value="/code")publicResponseEntityObjectgetCode(){ArithmeticCaptchacaptcha=newArithmeticCaptcha(,36);//几位数运算,默认是两位captcha.setLen(2);//获取运算的结果Stringresult=captcha.text();Stringuuid="loginCode:"+UUID.randomUUID().toString();System.out.println("result:"+result);System.out.println("uuid:"+uuid);//保存redisOperator.set(uuid,result,);MapString,ObjectimgResult=newHashMapString,Object(2){{put("status",);put("img",captcha.toBase64());put("uuid",uuid);}};returnResponseEntity.ok(imgResult);}GetMapping("/info/show")publicJSONResulttest(){SecurityUsersecurityUser=SecurityUntil.getUserInfo();System.out.println(securityUser);returnJSONResult.ok();}GetMapping("/info/admin")PreAuthorize("hasAnyRole(SUPER_ADMIN)")publicJSONResultadmin(){returnJSONResult.ok(SecurityUntil.getUserInfo());}GetMapping("/info/user")PreAuthorize("hasAnyRole(user,SUPER_ADMIN)")publicJSONResultuser(){returnJSONResult.ok(newSecurityUser());}/***必须同时拥有SUPER_ADMIN和admin的话*return*/GetMapping("/helloUser")PreAuthorize("hasRole(SUPER_ADMIN)ANDhasRole(user)")publicStringhelloUser(){return"hello,user";}}IUserService
publicinterfaceIUserServiceextendsIServiceUser{/***根据手机号查询用户*
params手机号*return用户信息*/UserselectUserByPhoneNumber(Strings);/***获取用户角色信息*paramuserId用户id*return角色集合*/ListRoleselectRoleByUserId(IntegeruserId);/***获取用户权限列表*paramuserId用户id*return权限集合*/ListMenuselectMenuByUserId(IntegeruserId);/***根据登录名获取用户基本信息*paramloginName登录用户名*return用户基本信息*/UserInfoBOgetUserInfo(StringloginName);}UserServiceImpl
ServicepublicclassUserServiceImplextendsServiceImplUserMapper,UserimplementsIUserService{OverridepublicUserselectUserByPhoneNumber(Strings){returnthis.baseMapper.selectUserByPhoneNumber(s);}OverridepublicListRoleselectRoleByUserId(IntegeruserId){returnthis.baseMapper.selectRoleByUserId(userId);}OverridepublicListMenuselectMenuByUserId(IntegeruserId){returnthis.baseMapper.getMenus(userId);}OverridepublicUserInfoBOgetUserInfo(StringloginName){returnthis.baseMapper.getUserInfo(loginName);}}UserMapper
import