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

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

Spring Security 在 Spring Boot 中的使用詳解【集中式】

瀏覽:111日期:2023-08-07 18:30:50

1.1 準備

1.1.1 創建 Spring Boot 項目

  創建好一個空的 Spring Boot 項目之后,寫一個 controller 驗證此時是可以直接訪問到該控制器的。

Spring Security 在 Spring Boot 中的使用詳解【集中式】Spring Security 在 Spring Boot 中的使用詳解【集中式】

1.1.2 引入 Spring Security

  在 Spring Boot 中引入 Spring Security 是相當簡單的,可以在用腳手架創建項目的時候勾選,也可以創建完畢后在 pom 文件中加入相關依賴。

Spring Security 在 Spring Boot 中的使用詳解【集中式】

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId></dependency>

  引入 Spring Security 后再次訪問會發現直接被彈到了登錄頁面,此時我們還什么都沒有配置,為什么 Security 會生效呢,這是因為 Spring Boot 幫我們完成了在 Spring 中需要完成的諸多配置【☞ Spring Security 基礎入門】。也正是因為 Spring Boot 提供了自動化配置方案,讓我們可以“零配置”的使用 Spring Security,所以在 Spring Boot 項目中我們通常使用的安全框架是 Spring Security 而在 Spring 中一般使用 Shiro。

Spring Security 在 Spring Boot 中的使用詳解【集中式】

  我們并沒有配置靜態的用戶那么該如何登錄呢,Spring Boot 為我們提供了一個默認的用戶,用戶名為:user,密碼則是在啟動 Spring Boot 項目是隨機生成的,我們可以在控制臺找到他。

Spring Security 在 Spring Boot 中的使用詳解【集中式】

1.2 配置認證

1.2.1 添加靜態用戶

  Spring Boot 除了一些信息寫道 yml 配置文件中,其他配置都使用配置類,Spring Security 需要繼承 WebSecurityConfigurerAdapter,配置用戶信息需要重寫 configure(AuthenticationManagerBuilder auth) 方法。配置完畢后,將不會再使用 user 用戶。

/** * Created with IntelliJ IDEA. * * @author Demo_Null * @date 2020/10/18 * @description Spring Security 配置類 */@Configuration@EnableWebSecuritypublic class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { // 配置靜態用戶 auth.inMemoryAuthentication() .withUser('admin') .password('{noop}123') // 此處需要加 {noop} 表示該密碼為明文 .roles('USER'); }}

1.2.2 添加數據庫認證 ☞ 添加用戶實體類

  Spring Security 中使用的用戶是 UserDetails,我們要么讓自定義用戶類實現 UserDetails,要么使用時將自定義用戶類轉換為 UserDetails。建議實現 UserDetails。因為該類中涉及到角色信息所以我們還需要創建角色類。我們在以后的操作中可能會將對象轉為 json 或者將 json 轉為對象,所以我們重寫的方法需要加上 @JsonIgnore 將其忽略(該類本來就需要的不用忽略)。

/** * Created with IntelliJ IDEA. * * @author gaohu9712@163.com * @date 2020/10/18 * @description 用戶實體類 */public class SysUser implements UserDetails { private Long id; private String username; private String passwrod; private List<SysRole> roleList = new ArrayList<>(); public Long getId() { return id; } public void setId(Long id) { this.id = id; } public void setUsername(String username) { this.username = username; } public void setPasswrod(String passwrod) { this.passwrod = passwrod; } public List<SysRole> getRoleList() { return roleList; } public void setRoleList(List<SysRole> roleList) { this.roleList = roleList; } @Override public Collection<? extends GrantedAuthority> getAuthorities() { return roleList; } @Override public String getPassword() { return passwrod; } @Override public String getUsername() { return username; } @Override @JsonIgnore public boolean isAccountNonExpired() { return false; } @Override @JsonIgnore public boolean isAccountNonLocked() { return false; } @Override @JsonIgnore public boolean isCredentialsNonExpired() { return false; } @Override @JsonIgnore public boolean isEnabled() { return false; }}

☞ 創建角色類

  Spring Security 中使用的角色信息使用的是 GrantedAuthority 所以我們的角色類也需要實現 GrantedAuthority。

/** * Created with IntelliJ IDEA. * * @author Demo_Null * @date 2020/10/18 * @description 角色類 */public class SysRole implements GrantedAuthority { private Long id; private String roleName; private String roleDesc; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getRoleName() { return roleName; } public void setRoleName(String roleName) { this.roleName = roleName; } public String getRoleDesc() { return roleDesc; } public void setRoleDesc(String roleDesc) { this.roleDesc = roleDesc; } @Override @JsonIgnore public String getAuthority() { return roleName; }}

☞ 添加持久層

此處省略使用通用 mapper 操作數據庫的內容【☞ Mybatis 使用通用 mapper】,jpa 等其他操作數據庫的方法亦可。

☞ 認證類

  Spring Boot 中 Spring Security 的認證類與 Spring 中的并無區別,都需要實現 UserDetailsService 接口,然后重寫 loadUserByUsername(String s) 方法并返回一個 UserDetails。

/** * Created with IntelliJ IDEA. * * @author Demo_Null * @date 2020/10/18 * @description 認證類 */ public class UserDetailsServiceImpl implements UserDetailsService { @Autowired private UserMapper userMapper; @Override public UserDetails loadUserByUsername(String s) throws UsernameNotFoundException { return userMapper.findByName(s); }}

☞ 配置類

/** * Created with IntelliJ IDEA. * * @author Demo_Null * @date 2020/10/18 * @description Spring Security 配置類 */@Configuration@EnableWebSecuritypublic class SecurityConfig extends WebSecurityConfigurerAdapter { @Autowired private UserDetailsService userDetailsService; @Bean // BCrypt 交由 Ioc 容器管理 public BCryptPasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { // 認證類 auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder()); }}

1.3 授權

1.3.1 開啟方法級授權

  在啟動類上使用 @EnableGlobalMethodSecurity 注解開啟方法級授權。參數 prePostEnabled 代表 Spring 中的權限控制注解;securedEnabled 代表 Spring Security 中的權限控制注解; jsr250Enabled 代表 jsr250 的權限控制注解。

@SpringBootApplication@MapperScan('com.software.springsecurity.mapper')@EnableGlobalMethodSecurity(securedEnabled = true)public class SpringSecurityApplication { public static void main(String[] args) { SpringApplication.run(SpringSecurityApplication.class, args); }}

1.3.2 添加方法權限

  當用戶僅有 ROLE_USER 權限時僅能訪問 findStr 方法而不能訪問 get 方法;要想訪問 get 方法用戶必須具有 ROLE_ADMIN 權限。

/** * Created with IntelliJ IDEA. * * @author Demo_Null * @date 2020/10/18 * @description */@RestController@RequestMapping('/demo')public class DemoController { @GetMapping('/find') @Secured('ROLE_USER') public String findStr() { return '請求成功'; } @GetMapping('/get') @Secured('ROLE_ADMIN') public String get() { return 'get'; }}

Spring Security 在 Spring Boot 中的使用詳解【集中式】

Spring Security 在 Spring Boot 中的使用詳解【集中式】

1.3.3 異常攔截頁面

@ControllerAdvicepublic class HandlerControllerAdvice { @ExceptionHandler(AccessDeniedException.class) public String handlerException(){ return 'redirect:/403.html'; } @ExceptionHandler(RuntimeException.class) public String runtimeHandlerException(){ return 'redirect:/500.html'; }}

總結

到此這篇關于Spring Security 在 Spring Boot 中的使用詳解【集中式】的文章就介紹到這了,更多相關Spring Security 在 Spring Boot使用內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Spring
相關文章:
主站蜘蛛池模板: 上海刑事律师|刑事辩护律师|专业刑事犯罪辩护律师免费咨询-[尤辰荣]金牌上海刑事律师团队 | 骨龄仪_骨龄检测仪_儿童骨龄测试仪_品牌生产厂家【品源医疗】 | 低气压试验箱_高低温低气压试验箱_低气压实验箱 |林频试验设备品牌 | 安平县鑫川金属丝网制品有限公司,防风抑尘网,单峰防风抑尘,不锈钢防风抑尘网,铝板防风抑尘网,镀铝锌防风抑尘网 | 舞台木地板厂家_体育运动木地板_室内篮球馆木地板_实木运动地板厂家_欧氏篮球地板推荐 | 淘趣英语网 - 在线英语学习,零基础英语学习网站 | 三氯异氰尿酸-二氯-三氯-二氯异氰尿酸钠-优氯净-强氯精-消毒片-济南中北_优氯净厂家 | 深圳高新投三江工业消防解决方案提供厂家_服务商_园区智慧消防_储能消防解决方案服务商_高新投三江 | 旋片真空泵_真空泵_水环真空泵_真空机组-深圳恒才机电设备有限公司 | 深圳市源和塑胶电子有限公司-首页 | 橡胶电子拉力机-塑料-微电脑电子拉力试验机厂家-江苏天源 | 模切之家-专注服务模切行业的B2B平台!| 中开泵,中开泵厂家,双吸中开泵-山东博二泵业有限公司 | 智能气瓶柜(大型气瓶储存柜)百科 | 无线讲解器-导游讲解器-自助讲解器-分区讲解系统 品牌生产厂家[鹰米讲解-合肥市徽马信息科技有限公司] | 干粉砂浆设备_干混砂浆生产线_腻子粉加工设备_石膏抹灰砂浆生产成套设备厂家_干粉混合设备_砂子烘干机--郑州铭将机械设备有限公司 | 酒糟烘干机-豆渣烘干机-薯渣烘干机-糟渣烘干设备厂家-焦作市真节能环保设备科技有限公司 | 蒜肠网-动漫,二次元,COSPLAY,漫展以及收藏型模型,手办,玩具的新媒体.(原变形金刚变迷TF圈) | 泵阀展|阀门展|水泵展|流体机械展 -2025上海国际泵管阀展览会flowtech china | 厚壁钢管-厚壁无缝钢管-小口径厚壁钢管-大口径厚壁钢管 - 聊城宽达钢管有限公司 | 印刷人才网 印刷、包装、造纸,中国80%的印刷企业人才招聘选印刷人才网! | 合肥通道闸-安徽车牌识别-人脸识别系统厂家-安徽熵控智能技术有限公司 | 切铝机-数控切割机-型材切割机-铝型材切割机-【昆山邓氏精密机械有限公司】 | 东莞画册设计_logo/vi设计_品牌包装设计 - 华略品牌设计公司 | 广东护栏厂家-广州护栏网厂家-广东省安麦斯交通设施有限公司 | 手机存放柜,超市储物柜,电子储物柜,自动寄存柜,行李寄存柜,自动存包柜,条码存包柜-上海天琪实业有限公司 | 电缆桥架生产厂家_槽式/梯式_热镀锌线槽_广东东莞雷正电气 | 台式核磁共振仪,玻璃软化点测定仪,旋转高温粘度计,测温锥和测温块-上海麟文仪器 | 工业用品一站式采购平台|南创工品汇-官网|广州南创 | 隧道烘箱_隧道烘箱生产厂家-上海冠顶专业生产烘道设备 | 电动高尔夫球车|电动观光车|电动巡逻车|电动越野车厂家-绿友机械集团股份有限公司 | 蓝莓施肥机,智能施肥机,自动施肥机,水肥一体化项目,水肥一体机厂家,小型施肥机,圣大节水,滴灌施工方案,山东圣大节水科技有限公司官网17864474793 | 手术室净化厂家_成都实验室装修公司_无尘车间施工单位_洁净室工程建设团队-四川华锐16年行业经验 | 润东方环保空调,冷风机,厂房车间降温设备-20年深圳环保空调生产厂家 | 东莞市超赞电子科技有限公司 全系列直插/贴片铝电解电容,电解电容,电容器 | 杭州顺源过滤机械有限公司官网-压滤机_板框压滤机_厢式隔膜压滤机厂家 | 劳动法网-专业的劳动法和劳动争议仲裁服务网 | 模型公司_模型制作_沙盘模型报价-中国模型网| 东莞猎头公司_深圳猎头公司_广州猎头公司-广东万诚猎头提供企业中高端人才招聘服务 | 杜甫仪器官网|实验室平行反应器|升降水浴锅|台式低温循环泵 | 上海小程序开发-上海小程序制作公司-上海网站建设-公众号开发运营-软件外包公司-咏熠科技 |