国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

SpringBoot整合SpringSecurity詳細(xì)教程(實(shí)戰(zhàn)開(kāi)發(fā)講解)

這篇具有很好參考價(jià)值的文章主要介紹了SpringBoot整合SpringSecurity詳細(xì)教程(實(shí)戰(zhàn)開(kāi)發(fā)講解)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

今天小編使用到了SpringBoot+SpringSecurity進(jìn)行公司項(xiàng)目開(kāi)發(fā),之前使用到項(xiàng)目都是采用xml配置來(lái)整合SpringSecurity,對(duì)于第一次使用SpringBoot整合SpringSecurity也是比較陌生,過(guò)程中也是遇到各種各樣的問(wèn)題,在CSDN的知識(shí)海洋中遺留的相關(guān)的整合教程也是五花八門,找一篇完整的教程簡(jiǎn)直像是大海撈針,so,小編決定親自揮筆,整頓這種低質(zhì)量博文

首先、我們創(chuàng)建一個(gè)SpringBoot項(xiàng)目工程,SpringBoot項(xiàng)目工程的搭建,小編這里就不做演示,比較簡(jiǎn)單 ,目前已經(jīng)搭建并成功啟動(dòng)

springboot+springsecurity,java,spring boot,java,spring

接下來(lái)、對(duì)于SpringBoot整合SpringSecurity最重要的一步,毫無(wú)疑問(wèn)必然是SpringSecurity依賴導(dǎo)入,這里導(dǎo)入的是spring-boot-starter-security依賴

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

springboot+springsecurity,java,spring boot,java,spring

?依賴已經(jīng)成功導(dǎo)入,此時(shí)你訪問(wèn)SpringBoot項(xiàng)目地址:http://localhost:8080/,你將會(huì)跳轉(zhuǎn)到SpringSecurity默認(rèn)的登錄頁(yè)面,由于小編這里只是講解操作,所以就沒(méi)有設(shè)置自定義的登陸頁(yè)面,默認(rèn)登陸頁(yè)面如下:

springboot+springsecurity,java,spring boot,java,spring

?SpringSecurity其實(shí)設(shè)置的有默認(rèn)的登錄賬號(hào)和密碼,默認(rèn)的賬號(hào)是user,默認(rèn)的登錄密碼在SpringBoot項(xiàng)目啟動(dòng)的時(shí)候會(huì)自動(dòng)生成,圖中紅框部分就是SpringSecurity生成的初始密碼,大家可以自行測(cè)試登陸

springboot+springsecurity,java,spring boot,java,spring

?接下來(lái)的知識(shí)和操作就比較重要了,大家一定要收藏、關(guān)注加點(diǎn)贊,拿出自己的小本本記錄下來(lái),下面即將講述SpringSecurity相關(guān)的配置操作

首先,建立一個(gè)config文件包,用來(lái)存儲(chǔ)相關(guān)的SpringSecurity的配置文件類springboot+springsecurity,java,spring boot,java,spring

第二、新建一個(gè)SpringSecurity的配置類SecurityConfig,繼承于WebSecurityConfigurerAdapter,代碼塊如圖所示,大家可以直接復(fù)制,下面會(huì)對(duì)其中存疑的代碼進(jìn)行解釋

package com.geli.config;

import com.geli.service.impl.LoginUserDetailsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.builders.WebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Autowired
    private LoginUserDetailsService loginUserDetailsService;
    
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(loginUserDetailsService)// 設(shè)置自定義的userDetailsService
                .passwordEncoder(passwordEncoder());
    }

    @Override
    public void configure(WebSecurity web) throws Exception {
        web.ignoring().antMatchers("/css/**","/fonts/**","/images/**","/js/**");
    }

    @Bean
    public PasswordEncoder passwordEncoder(){
        // 使用BCrypt加密密碼
        return new BCryptPasswordEncoder();
    }


    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.headers().frameOptions().disable();//開(kāi)啟運(yùn)行iframe嵌套頁(yè)面
        http//1、配置權(quán)限認(rèn)證
                .authorizeRequests()
                //配置不攔截路由
                .antMatchers("/500").permitAll()
                .antMatchers("/403").permitAll()
                .antMatchers("/404").permitAll()
                .antMatchers("/goLogin.do").permitAll()
                .antMatchers("/login.do").permitAll()
                .anyRequest() //任何其它請(qǐng)求
                .authenticated() //都需要身份認(rèn)證
                .and()
                //2、登錄配置表單認(rèn)證方式
                .formLogin()
                .loginPage("/goLogin.do")//自定義登錄頁(yè)面的url
                .usernameParameter("username")//設(shè)置登錄賬號(hào)參數(shù),與表單參數(shù)一致
                .passwordParameter("password")//設(shè)置登錄密碼參數(shù),與表單參數(shù)一致
                // 告訴Spring Security在發(fā)送指定路徑時(shí)處理提交的憑證,默認(rèn)情況下,將用戶重定向回用戶來(lái)自的頁(yè)面。登錄表單form中action的地址,也就是處理認(rèn)證請(qǐng)求的路徑,
                // 只要保持表單中action和HttpSecurity里配置的loginProcessingUrl一致就可以了,也不用自己去處理,它不會(huì)將請(qǐng)求傳遞給Spring MVC和您的控制器,所以我們就不需要自己再去寫一個(gè)/user/login的控制器接口了
                .loginProcessingUrl("/login.do")//配置默認(rèn)登錄入口
                .defaultSuccessUrl("/goIndex.do")//登錄成功后默認(rèn)的跳轉(zhuǎn)頁(yè)面路徑
                .failureUrl("/goLogin.do?error=true")
                .and()
                //3、注銷
                .logout()
                .logoutUrl("/logout.do")
                .permitAll()
                .and()
                //4、session管理
                .sessionManagement()
                .invalidSessionUrl("/login.html") //失效后跳轉(zhuǎn)到登陸頁(yè)面
                //單用戶登錄,如果有一個(gè)登錄了,同一個(gè)用戶在其他地方登錄將前一個(gè)剔除下線
                //.maximumSessions(1).expiredSessionStrategy(expiredSessionStrategy())
                //單用戶登錄,如果有一個(gè)登錄了,同一個(gè)用戶在其他地方不能登錄
                //.maximumSessions(1).maxSessionsPreventsLogin(true) ;
                .and()
                //5、禁用跨站csrf攻擊防御
                .csrf()
                .disable();
    }

}

1、對(duì)于注入的loginUserDetailsService對(duì)象,馬上就會(huì)講到,后面會(huì)創(chuàng)建,大家不用著急

2、第二部分代碼是認(rèn)證管理器的,大家自行復(fù)制就行springboot+springsecurity,java,spring boot,java,spring

?3、第三部分是用來(lái)放行靜態(tài)資源文件的,SpringSecurity會(huì)默認(rèn)攔截靜態(tài)資源文件

springboot+springsecurity,java,spring boot,java,spring

4、第四部分代碼是用來(lái)設(shè)置加密方式的

springboot+springsecurity,java,spring boot,java,spring

?5、最后一部分是用來(lái)設(shè)置權(quán)限認(rèn)證配置

第三、新建上面缺少的LoginUserDetailsService類,該類需要添加@Service注解,所以小編放置在service包下面在,該類實(shí)現(xiàn)UserDetailsService接口,其中注入的是查詢數(shù)據(jù)庫(kù)的UserService,沒(méi)有注入dao,只是為了方便測(cè)試,打開(kāi)根據(jù)自己需要進(jìn)行修改就是,目的只是為了查詢數(shù)據(jù)庫(kù)數(shù)據(jù)

package com.geli.service.impl;

import com.geli.domain.Permission;
import com.geli.domain.User;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;


@Service
public class LoginUserDetailsService implements UserDetailsService {
    @Resource
    private UserServiceImpl userService;
    


    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        User user = userService.findUserByUserName(username);
        if (user == null){
            throw new UsernameNotFoundException("not found");
        }
        //定義權(quán)限列表.
        List<GrantedAuthority> authorities = new ArrayList<>();
        // 用戶可以訪問(wèn)的資源名稱(或者說(shuō)用戶所擁有的權(quán)限) 注意:必須"ROLE_"開(kāi)頭
        if (user.getRole()!=null){
            authorities.add(new SimpleGrantedAuthority(user.getRole().getKeyWord()));
            if (user.getRole().getPermissionList() !=null && user.getRole().getPermissionList().size()>0){
                for (Permission permission : user.getRole().getPermissionList()) {
                    authorities.add(new SimpleGrantedAuthority(permission.getKeyWord()));
                }
            }
        }

        org.springframework.security.core.userdetails.User user1 = new org.springframework.security.core.userdetails.User(user.getUsername(), user.getPassword(), authorities);
        return user1;
    }
}

其中比較重要的就是添加用戶角色和權(quán)限的部分,大家根據(jù)自己的實(shí)際需求進(jìn)行修改就可以?,就是圖中這部分代碼springboot+springsecurity,java,spring boot,java,spring

?第四,小編這里貼一下自己的實(shí)體類代碼,大家可以方便理解

用戶實(shí)體類

package com.geli.domain;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Date;

@NoArgsConstructor
@AllArgsConstructor
@Data
public class User implements Serializable {
    private Integer id; //用戶id
    private String username;    //用戶賬號(hào)
    private String password;    //用戶密碼
    private String addUser;     //添加用戶人員賬號(hào)
    private String editUser;  //編輯用戶人員賬號(hào)
    private Date addDate;   //添加賬號(hào)時(shí)間
    private Date updateDate;    //更新賬號(hào)時(shí)間
    private Role role;  //用戶角色

}

角色實(shí)體類

package com.geli.domain;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Set;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Role implements Serializable {
    private Integer id;     //角色id
    private String name;    //角色名稱
    private String keyWord; //角色關(guān)鍵字
    private String description; //角色描述
    private Set<Permission> permissionList;    //用戶權(quán)限集合
}

權(quán)限實(shí)體類

package com.geli.domain;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Permission implements Serializable {
    private Integer id;     //權(quán)限id
    private String name;    //權(quán)限名稱
    private String keyWord; //權(quán)限關(guān)鍵字
    private String description; //權(quán)限描述

}

第四、就下來(lái)就是測(cè)試SpringSecurity,小編在UserServiceImpl里面添加了一個(gè)用戶賬號(hào),代碼如圖所示:

import com.geli.service.UserService;
import org.springframework.stereotype.Service;

@Service
public class UserServiceImpl implements UserService {
    @Override
    public User findUserByUserName(String username) {
        User user = new User();
        user.setId(1);
        user.setUsername("D46033");
  user.setPassword("$2a$10$Pgs46f8LzTjOvA5Sg6qDkOBbUoAtWQQdHFoEbbmWPak.34/NwJQrW");
        return user;
    }
}

進(jìn)入登陸頁(yè)面?springboot+springsecurity,java,spring boot,java,spring

?登陸成功之后自動(dòng)跳轉(zhuǎn)到自定義的index頁(yè)面springboot+springsecurity,java,spring boot,java,spring

?以上就是SpringBoot整合SpringSecurity的所有內(nèi)容,中間測(cè)試過(guò)程中缺少了相關(guān)配置,與SpringSecurity無(wú)關(guān),小編就不進(jìn)行展示了,一篇小小的文章耗費(fèi)的是作者眾多實(shí)驗(yàn)的心血,希望大家多多支持,一鍵三連!文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-617879.html

到了這里,關(guān)于SpringBoot整合SpringSecurity詳細(xì)教程(實(shí)戰(zhàn)開(kāi)發(fā)講解)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 如何用SpringBoot整合Redis(詳細(xì)講解~)

    如何用SpringBoot整合Redis(詳細(xì)講解~)

    大家好,我是卷心菜。本篇主要講解用SpringBoot整合Redis,如果您看完文章有所收獲,可以三連支持博主哦~,嘻嘻。 ?? 作者簡(jiǎn)介: 在校大學(xué)生一枚,Java領(lǐng)域新星創(chuàng)作者,Java、Python正在學(xué)習(xí)中,期待和大家一起學(xué)習(xí)一起進(jìn)步~ ?? 個(gè)人主頁(yè):我是一棵卷心菜的個(gè)人主頁(yè) ?? 本

    2024年01月17日
    瀏覽(18)
  • 【花藝電商】SpringBoot集成MyBatis-Plus、Swagger2、SpringSecurity、OAuth2等技術(shù)整合開(kāi)發(fā)

    【花藝電商】SpringBoot集成MyBatis-Plus、Swagger2、SpringSecurity、OAuth2等技術(shù)整合開(kāi)發(fā)

    目錄 一、功能介紹 1. 說(shuō)明 2. 功能實(shí)現(xiàn) 3. 技術(shù)應(yīng)用 二、技術(shù)詳述 1.MyBatis-Plus 主要體現(xiàn) 項(xiàng)目應(yīng)用 2.SpringSecurity 應(yīng)用作用 三、頁(yè)面展示 1. 登入 2. 主頁(yè) 3. 詳情 4. 購(gòu)物車 5. 訂單 6.?沙箱支付 每篇一獲 這個(gè)項(xiàng)目主要使用了 Spring Security 、 MyBatis-Plus 、 Redis 、 雪花ID 、 參數(shù)校驗(yàn)技

    2024年01月25日
    瀏覽(15)
  • SpringBoot整合SpringSecurity和JWT

    SpringBoot整合SpringSecurity和JWT

    JWT 1.介紹: 全稱 JSON Web Token ,通過(guò)數(shù)字簽名的方式,以 JSON 為載體,在不同的服務(wù)終端之間安全的傳遞信息。 常用于授權(quán)認(rèn)證,用戶登錄后的每個(gè)請(qǐng)求都包含 JWT ,后端處理請(qǐng)求之前都要進(jìn)行校驗(yàn)。 2.組成: Header :數(shù)據(jù)頭,令牌類型和加密算法 Payload :負(fù)載,請(qǐng)求體和其他

    2024年02月03日
    瀏覽(40)
  • springboot2.7整合springSecurity

    springboot2.7整合springSecurity

    本著前人栽樹(shù),后人乘涼的這種思想,自己花了一些時(shí)間,用心的整理了一套springboot整合springsecurity的教程。 該教程是基于springboot2.7.3版本開(kāi)發(fā)的,在2.7以上版本中,springSecurity已經(jīng)廢棄了WebSecurityConfigurerAdapter,而是使用 bean 注入的方式,詳情可參閱官方文檔:https://spring

    2023年04月21日
    瀏覽(21)
  • SpringBoot整合WebSocket詳細(xì)教程

    SpringBoot整合WebSocket詳細(xì)教程

    共開(kāi)啟兩個(gè)頁(yè)面,實(shí)現(xiàn)一對(duì)一聊天。 服務(wù)端代碼:https://gitee.com/lianaozhe/springboot-websocket.git 導(dǎo)入相關(guān)依賴: WebSocketConfig配置類: WebSocket操作類: TestController測(cè)試接口類: test.html文件: 復(fù)制test.html文件為test2.html文件,將上面的userId由’20’改為’10’,后面測(cè)試使用。 運(yùn)行服

    2024年02月01日
    瀏覽(21)
  • SpringSecurity框架快速搭建(SpringBoot整合Security)

    SpringSecurity框架快速搭建(SpringBoot整合Security)

    目錄 Common類 Config類 CorsConfig(解決跨域問(wèn)題) RedisConfig (Redis數(shù)據(jù)庫(kù)配置) Spring Security (配置安全功能的類) expression類(Expression 類通常用于權(quán)限控制和安全策略的定義) SGExpressionRoot(判斷用戶是否具有某個(gè)權(quán)限) Filter類 JwtAuthenticationTokenFilter(解析token看是否放行) Handler類

    2024年02月09日
    瀏覽(21)
  • 使用SpringBoot一小時(shí)快速搭建一個(gè)簡(jiǎn)單后臺(tái)管理(增刪改查)(超詳細(xì)教程)
                    
            
各大技術(shù)基礎(chǔ)教學(xué)、實(shí)戰(zhàn)項(xiàng)目開(kāi)發(fā)教學(xué)

    使用SpringBoot一小時(shí)快速搭建一個(gè)簡(jiǎn)單后臺(tái)管理(增刪改查)(超詳細(xì)教程) 各大技術(shù)基礎(chǔ)教學(xué)、實(shí)戰(zhàn)項(xiàng)目開(kāi)發(fā)教學(xué)

    ?最近也是臨近期末了,各種的期末大作業(yè),后臺(tái)管理也是很多地方需要用到的,為了方便大家能快速上手,快速搭建一個(gè)簡(jiǎn)單的后臺(tái)管理,我花了兩天時(shí)間整理了一下 我會(huì)從0開(kāi)始介紹,從數(shù)據(jù)庫(kù)的設(shè)計(jì)到前端頁(yè)面的引入最后到后端代碼的編寫,你只需要會(huì)一點(diǎn)前端的基礎(chǔ)和

    2023年04月13日
    瀏覽(31)
  • 《SpringBoot篇》18.SpringBoot整合Memcached緩存超詳細(xì)教程

    《SpringBoot篇》18.SpringBoot整合Memcached緩存超詳細(xì)教程

    陳老老老板 說(shuō)明:工作了,學(xué)習(xí)一些新的技術(shù)棧和工作中遇到的問(wèn)題,邊學(xué)習(xí)邊總結(jié),各位一起加油。需要注意的地方都標(biāo)紅了,還有資源的分享. 一起加油。 本文是介紹Memcached與SpringBoot整合 整合之前先大致了解一下Memcached,是一個(gè)? 免費(fèi)開(kāi)源的、高性能的、具有分布式內(nèi)

    2024年02月03日
    瀏覽(19)
  • springboot整合springsecurity+oauth2.0密碼授權(quán)模式

    springboot整合springsecurity+oauth2.0密碼授權(quán)模式

    本文采用的springboot去整合springsecurity,采用oauth2.0授權(quán)認(rèn)證,使用jwt對(duì)token增強(qiáng)。本文僅為學(xué)習(xí)記錄,如有不足多謝提出。 OAuth 2.0是用于授權(quán)的行業(yè)標(biāo)準(zhǔn)協(xié)議。OAuth 2.0為簡(jiǎn)化客戶端開(kāi)發(fā)提供了特定的授權(quán)流,包括Web應(yīng)用、桌面應(yīng)用、移動(dòng)端應(yīng)用等。 Resource owner(資源擁有者)

    2024年02月04日
    瀏覽(21)
  • SpringBoot3整合SpringSecurity,實(shí)現(xiàn)自定義接口權(quán)限過(guò)濾

    SpringBoot3整合SpringSecurity,實(shí)現(xiàn)自定義接口權(quán)限過(guò)濾

    接口權(quán)限過(guò)濾是指對(duì)于某些接口或功能,系統(tǒng)通過(guò)設(shè)定一定的權(quán)限規(guī)則,只允許經(jīng)過(guò)身份認(rèn)證且擁有相應(yīng)權(quán)限的用戶或應(yīng)用程序進(jìn)行訪問(wèn)和操作 。這種技術(shù)可以有效地保護(hù)系統(tǒng)資源和數(shù)據(jù)安全,防止未授權(quán)的用戶或程序進(jìn)行惡意操作或非法訪問(wèn)。通常情況下,接口權(quán)限過(guò)濾需

    2024年02月08日
    瀏覽(24)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包