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

您的位置:首頁技術(shù)文章
文章詳情頁

Spring Security基于數(shù)據(jù)庫實現(xiàn)認(rèn)證過程解析

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

創(chuàng)建數(shù)據(jù)庫

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’, ’數(shù)據(jù)庫管理員’);INSERT INTO `role` VALUES (’2’, ’admin’, ’系統(tǒng)管理員’);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;

導(dǎo)入依賴

<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實現(xiàn)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之后密碼必須加密 把數(shù)據(jù)庫查出的用戶信息交給SpringSecurity處理 配置httpSercurity

@Configurationpublic class SecurityConfig extends WebSecurityConfigurerAdapter { @Autowired UserService userService;//把數(shù)據(jù)庫查出的用戶信息交給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(); }}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Spring
相關(guān)文章:
主站蜘蛛池模板: 流变仪-热分析联用仪-热膨胀仪厂家-耐驰科学仪器商贸 | CTAB,表面活性剂1631溴型(十六烷基三甲基溴化铵)-上海升纬化工原料有限公司 | 四合院设计_四合院装修_四合院会所设计-四合院古建设计与建造中心1 | 明渠式紫外线杀菌器-紫外线消毒器厂家-定州市优威环保 | 小青瓦丨古建筑瓦丨青瓦厂家-宜兴市徽派古典建筑材料有限公司 | 箱式破碎机_移动方箱式破碎机/价格/厂家_【华盛铭重工】 | 北京乾茂兴业科技发展有限公司 | 招商帮-一站式网络营销服务|搜索营销推广|信息流推广|短视视频营销推广|互联网整合营销|网络推广代运营|招商帮企业招商好帮手 | 生物制药洁净车间-GMP车间净化工程-食品净化厂房-杭州波涛净化设备工程有限公司 | 台式核磁共振仪,玻璃软化点测定仪,旋转高温粘度计,测温锥和测温块-上海麟文仪器 | 新密高铝耐火砖,轻质保温砖价格,浇注料厂家直销-郑州荣盛窑炉耐火材料有限公司 | 非小号行情 - 专业的区块链、数字藏品行情APP、金色财经官网 | 卫生人才网-中国专业的医疗卫生医学人才网招聘网站! | 压片机_高速_单冲_双层_花篮式_多功能旋转压片机-上海天九压片机厂家 | 山东集装箱活动房|济南集装箱活动房-济南利森集装箱有限公司 | 卫浴散热器,卫浴暖气片,卫生间背篓暖气片,华圣格浴室暖气片 | 专业的新乡振动筛厂家-振动筛品质保障-环保振动筛价格—新乡市德科筛分机械有限公司 | STRO|DTRO-STRO反渗透膜(科普)_碟滤 | 安徽净化板_合肥岩棉板厂家_玻镁板厂家_安徽科艺美洁净科技有限公司 | 课件导航网_ppt课件_课件模板_课件下载_最新课件资源分享发布平台 | 广西教师资格网-广西教师资格证考试网 | 篮球地板厂家_舞台木地板品牌_体育运动地板厂家_凯洁地板 | 高压贴片电容|贴片安规电容|三端滤波器|风华电容代理南京南山 | 储能预警-储能消防系统-电池舱自动灭火装置-四川千页科技股份有限公司官网 | 工业淬火油烟净化器,北京油烟净化器厂家,热处理油烟净化器-北京众鑫百科 | 品牌策划-品牌设计-济南之式传媒广告有限公司官网-提供品牌整合丨影视创意丨公关活动丨数字营销丨自媒体运营丨数字营销 | 折弯机-刨槽机-数控折弯机-数控刨槽机-数控折弯机厂家-深圳豐科机械有限公司 | 新密高铝耐火砖,轻质保温砖价格,浇注料厂家直销-郑州荣盛窑炉耐火材料有限公司 | 广州番禺搬家公司_天河黄埔搬家公司_企业工厂搬迁_日式搬家_广州搬家公司_厚道搬迁搬家公司 | 光纤测温-荧光光纤测温系统-福州华光天锐光电科技有限公司 | 昆明网络公司|云南网络公司|昆明网站建设公司|昆明网页设计|云南网站制作|新媒体运营公司|APP开发|小程序研发|尽在昆明奥远科技有限公司 | 泰来华顿液氮罐,美国MVE液氮罐,自增压液氮罐,定制液氮生物容器,进口杜瓦瓶-上海京灿精密机械有限公司 | 皮带输送机-大倾角皮带输送机-皮带输送机厂家-河南坤威机械 | 必胜高考网_全国高考备考和志愿填报信息平台| 药品/药物稳定性试验考察箱-埃里森仪器设备(上海)有限公司 | 天津市能谱科技有限公司-专业的红外光谱仪_红外测油仪_紫外测油仪_红外制样附件_傅里叶红外光谱技术生产服务厂商 | 海外整合营销-独立站营销-社交媒体运营_广州甲壳虫跨境网络服务 焊管生产线_焊管机组_轧辊模具_焊管设备_焊管设备厂家_石家庄翔昱机械 | 电加热导热油炉-空气加热器-导热油加热器-翅片电加热管-科安达机械 | 塑料撕碎机_编织袋撕碎机_废纸撕碎机_生活垃圾撕碎机_废铁破碎机_河南鑫世昌机械制造有限公司 | 反渗透水处理设备|工业零排放|水厂设备|软化水设备|海南净水设备--海南水处理设备厂家 | 小型UV打印机-UV平板打印机-大型uv打印机-UV打印机源头厂家 |松普集团 |