电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Spring Security基于數據庫實現認證過程解析

瀏覽:59日期:2023-08-21 08:16:58

創建數據庫

SET FOREIGN_KEY_CHECKS=0;-- ------------------------------ Table structure for role-- ----------------------------DROP TABLE IF EXISTS `role`;CREATE TABLE `role` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(32) DEFAULT NULL,`nameZh` varchar(32) DEFAULT NULL,PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;-- ------------------------------ Records of role-- ----------------------------INSERT INTO `role` VALUES (’1’, ’dba’, ’數據庫管理員’);INSERT INTO `role` VALUES (’2’, ’admin’, ’系統管理員’);INSERT INTO `role` VALUES (’3’, ’user’, ’用戶’);-- ------------------------------ Table structure for user-- ----------------------------DROP TABLE IF EXISTS `user`;CREATE TABLE `user` (`id` int(11) NOT NULL AUTO_INCREMENT,`username` varchar(32) DEFAULT NULL,`password` varchar(255) DEFAULT NULL,`enabled` tinyint(1) DEFAULT NULL,`locked` tinyint(1) DEFAULT NULL,PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;-- ------------------------------ Records of user-- ----------------------------INSERT INTO `user` VALUES (’1’, ’root’, ’$2a$10$RMuFXGQ5AtH4wOvkUqyvuecpqUSeoxZYqilXzbz50dceRsga.WYiq’, ’1’, ’0’);INSERT INTO `user` VALUES (’2’, ’admin’, ’$2a$10$RMuFXGQ5AtH4wOvkUqyvuecpqUSeoxZYqilXzbz50dceRsga.WYiq’, ’1’, ’0’);INSERT INTO `user` VALUES (’3’, ’sang’, ’$2a$10$RMuFXGQ5AtH4wOvkUqyvuecpqUSeoxZYqilXzbz50dceRsga.WYiq’, ’1’, ’0’);-- ------------------------------ Table structure for user_role-- ----------------------------DROP TABLE IF EXISTS `user_role`;CREATE TABLE `user_role` (`id` int(11) NOT NULL AUTO_INCREMENT,`uid` int(11) DEFAULT NULL,`rid` int(11) DEFAULT NULL,PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;-- ------------------------------ Records of user_role-- ----------------------------INSERT INTO `user_role` VALUES (’1’, ’1’, ’1’);INSERT INTO `user_role` VALUES (’2’, ’1’, ’2’);INSERT INTO `user_role` VALUES (’3’, ’2’, ’2’);INSERT INTO `user_role` VALUES (’4’, ’3’, ’3’);SET FOREIGN_KEY_CHECKS=1;

導入依賴

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId></dependency><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId></dependency><dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.3</version></dependency><dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> <version>5.1.46</version></dependency><dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.22</version></dependency>

spring.datasource.url=jdbc:mysql://127.0.0.1:3306/javaboy?useUnicode=true&characterEncoding=utf8spring.datasource.username=rootspring.datasource.password=rootspring.datasource.type=com.alibaba.druid.pool.DruidDataSource

讓bean實現UserDetails接口

public class User implements UserDetails { private Integer id; private String username; private String password; private Boolean enabled; private Boolean locked; private List<Role> roles; public List<Role> getRoles() { return roles; } public void setRoles(List<Role> roles) { this.roles = roles; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public void setUsername(String username) { this.username = username; } public void setPassword(String password) { this.password = password; } public void setEnabled(Boolean enabled) { this.enabled = enabled; } public void setLocked(Boolean locked) { this.locked = locked; } @Override public Collection<? extends GrantedAuthority> getAuthorities() { List<SimpleGrantedAuthority> authorities = new ArrayList<>(); for (Role role : roles) { authorities.add(new SimpleGrantedAuthority('ROLE_' + role.getName())); } return authorities; } @Override public String getPassword() { return password; } public String getUsername() { return username; } //賬戶是否未過期 @Override public boolean isAccountNonExpired() { return true; } //賬戶是否未鎖定 @Override public boolean isAccountNonLocked() { return !locked; } @Override public boolean isCredentialsNonExpired() { return true; } @Override public boolean isEnabled() { return enabled; }}

public class Role { private Integer id; private String name; private String nameZh;...}

userMapper

在類上直接加@Mapper或者在SpringBoot啟動類上配置全局的掃描@MapperScan(basePackages='')

@Mapperpublic interface UserMapper { User loadUserByUsername(String username); List<Role> getUserRolesById(Integer id);}

<?xml version='1.0' encoding='UTF-8' ?><!DOCTYPE mapper PUBLIC '-//mybatis.org//DTD Mapper 3.0//EN' 'http://mybatis.org/dtd/mybatis-3-mapper.dtd'><mapper namespace='com.qwl.mysecuritydb.mapper.UserMapper'> <select resultType='com.qwl.mysecuritydb.bean.User'> select * from user where username = #{username} </select> <select resultType='com.qwl.mysecuritydb.bean.Role'> select * from role where id in(select rid from user_role where uid=#{id}) </select></mapper>

userService 同樣也要繼承UserServiceDetails接口

@Servicepublic class UserService implements UserDetailsService { @Autowired UserMapper userMapper; @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { User user =userMapper.loadUserByUsername(username); if(user==null){ throw new UsernameNotFoundException('用戶不存在'); } user.setRoles(userMapper.getUserRolesById(user.getId())); return user; }}

HelloController

@RestControllerpublic class HelloController { @GetMapping('/hello') public String hello(){ return 'hello security'; } @GetMapping('/dba/hello') public String dba(){ return 'hello dba'; } @GetMapping('/admin/hello') public String admin(){ return 'hello admin'; } @GetMapping('/user/hello') public String user(){ return 'hello user'; }}

SecurityConfig

SercurityConfig需要繼承WebSecurityConfigurerAdapter類,并在類上加@Configuration SpringSecurity5.0之后密碼必須加密 把數據庫查出的用戶信息交給SpringSecurity處理 配置httpSercurity

@Configurationpublic class SecurityConfig extends WebSecurityConfigurerAdapter { @Autowired UserService userService;//把數據庫查出的用戶信息交給SpringSecurity處理 @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth.userDetailsService(userService); } @Bean PasswordEncoder passwordEncoder(){ return new BCryptPasswordEncoder(); } @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests().antMatchers('/dba/**').hasRole('dba').antMatchers('/admin/**').hasRole('admin').antMatchers('/user/**').hasRole('user').anyRequest().authenticated().and().formLogin().permitAll().and().csrf().disable(); }}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Spring
相關文章:
主站蜘蛛池模板: 民用音响-拉杆音响-家用音响-ktv专用音响-万昌科技 | 中高频感应加热设备|高频淬火设备|超音频感应加热电源|不锈钢管光亮退火机|真空管烤消设备 - 郑州蓝硕工业炉设备有限公司 | 语料库-提供经典范文,文案句子,常用文书,您的写作得力助手 | 金蝶帐无忧|云代账软件|智能财税软件|会计代账公司专用软件 | 苏州伊诺尔拆除公司_专业酒店厂房拆除_商场学校拆除_办公楼房屋拆除_家工装拆除拆旧 | 磁力轮,磁力联轴器,磁齿轮,钕铁硼磁铁-北京磁运达厂家 | 菲希尔X射线测厚仪-菲希尔库伦法测厚仪-无锡骏展仪器有限责任公司 | 宁夏档案密集柜,智能密集柜,电动手摇密集柜-盛隆柜业宁夏档案密集柜厂家 | 保定市泰宏机械制造厂-河北铸件厂-铸造厂-铸件加工-河北大件加工 | 乙炔气体报警装置|固定式氯化氢检测仪|河南驰诚电气百科 | 翻斗式矿车|固定式矿车|曲轨侧卸式矿车|梭式矿车|矿车配件-山东卓力矿车生产厂家 | 医院专用门厂家报价-医用病房门尺寸大全-抗菌木门品牌推荐 | 碳纤维复合材料制品生产定制工厂订制厂家-凯夫拉凯芙拉碳纤维手机壳套-碳纤维雪茄盒外壳套-深圳市润大世纪新材料科技有限公司 | 天津货架厂_穿梭车货架_重型仓储货架_阁楼货架定制-天津钢力仓储货架生产厂家_天津钢力智能仓储装备 | 挨踢网-大家的导航! | 网站建设_网站制作_SEO优化推广_百度推广开户_朋友圈网络科技 | 武汉天安盾电子设备有限公司 - 安盾安检,武汉安检门,武汉安检机,武汉金属探测器,武汉测温安检门,武汉X光行李安检机,武汉防爆罐,武汉车底安全检查,武汉液体探测仪,武汉安检防爆设备 | 带式压滤机_污泥压滤机_污泥脱水机_带式过滤机_带式压滤机厂家-河南恒磊环保设备有限公司 | 超声波破碎仪-均质乳化机(供应杭州,上海,北京,广州,深圳,成都等地)-上海沪析实业有限公司 | 桁架机器人_桁架机械手_上下料机械手_数控车床机械手-苏州清智科技装备制造有限公司 | KBX-220倾斜开关|KBW-220P/L跑偏开关|拉绳开关|DHJY-I隔爆打滑开关|溜槽堵塞开关|欠速开关|声光报警器-山东卓信有限公司 | 聚合氯化铝-碱式氯化铝-聚合硫酸铁-聚氯化铝铁生产厂家多少钱一吨-聚丙烯酰胺价格_河南浩博净水材料有限公司 | 宁夏档案密集柜,智能密集柜,电动手摇密集柜-盛隆柜业宁夏档案密集柜厂家 | 冷凝水循环试验箱-冷凝水试验箱-可编程高低温试验箱厂家-上海巨为(www.juweigroup.com) | [品牌官网]贵州遵义双宁口腔连锁_贵州遵义牙科医院哪家好_种植牙_牙齿矫正_原华美口腔 | 超声骨密度仪-动脉硬化检测仪器-人体成分分析仪厂家/品牌/价格_南京科力悦 | 消电检公司,消电检价格,北京消电检报告-北京设施检测公司-亿杰(北京)消防工程有限公司 | 卫生纸复卷机|抽纸机|卫生纸加工设备|做卫生纸机器|小型卫生纸加工需要什么设备|卫生纸机器设备多少钱一台|许昌恒源纸品机械有限公司 | 吸污车_吸粪车_抽粪车_电动三轮吸粪车_真空吸污车_高压清洗吸污车-远大汽车制造有限公司 | 球磨机 选矿球磨机 棒磨机 浮选机 分级机 选矿设备厂家 | 机构创新组合设计实验台_液压实验台_气动实训台-戴育教仪厂 | 短信通106短信接口验证码接口群发平台_国际短信接口验证码接口群发平台-速度网络有限公司 | 天津散热器_天津暖气片_天津安尼威尔散热器制造有限公司 | 除甲醛公司-甲醛检测-广西雅居环境科技有限公司| 药品冷藏箱厂家_低温冰箱_洁净工作台-济南欧莱博电子商务有限公司官网 | 储气罐,真空罐,缓冲罐,隔膜气压罐厂家批发价格,空压机储气罐规格型号-上海申容压力容器集团有限公司 | 蚂蚁分类信息系统 - PHP同城分类信息系统 - MayiCMS | 公交驾校-北京公交驾校欢迎您! 工作心得_读书心得_学习心得_找心得体会范文就上学道文库 | 紧急切断阀_气动切断阀_不锈钢阀门_截止阀_球阀_蝶阀_闸阀-上海上兆阀门制造有限公司 | 能耗监测系统-节能监测系统-能源管理系统-三水智能化 | 贵阳用友软件,贵州财务软件,贵阳ERP软件_贵州优智信息技术有限公司 |