Springboot整合SpringSecurity--對靜態文件進行權限管理


一、要求

在這里插入圖片描述
index.html 可以被所有用戶訪問
1.html只能被VIP1訪問
2.html只能被VIP2訪問
3.html只能被VIP3訪問
沒有權限跳到登錄頁

二、依賴管理

  • springboot 2.2.5
  • spring security 5.2.4

pom.xml需要的依賴如下:

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

	</dependencies>

三、配置config文件

我們先看看官網的教程:spring security 5.2.4 配置教程
官網教程
模擬官網教程配置如下:

package com.xsy.worker_manager.config;

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.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;

@EnableWebSecurity // 開啟web security服務
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    //請求認證的規則
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        //首頁可以訪問,功能頁只有有權限的人才能訪問
        http.authorizeRequests()
                .antMatchers("/").permitAll()
                .antMatchers("/level1/**").hasRole("vip1")
                .antMatchers("/level2/**").hasRole("vip2")
                .antMatchers("/level3/**").hasRole("vip3");

        //沒有權限跳到登錄頁 /login,登陸后跳到主頁
        http.formLogin();


        //開啟注銷功能 /logout, 注銷后跳到首頁
        http.logout().logoutSuccessUrl("/index.html");
        
        //開啟記住我功能
        http.rememberMe();
    }


    //授權
    //密碼編碼
    //spring security 5.0+要密碼加密
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        //將用戶信息放到內存里
        auth.inMemoryAuthentication().passwordEncoder(new BCryptPasswordEncoder()).
                withUser("xsy").password(new BCryptPasswordEncoder().encode("123456")).roles("vip3").
        and().withUser("csy").password(new BCryptPasswordEncoder().encode("123456")).roles("vip2").
        and().withUser("sy").password(new BCryptPasswordEncoder().encode("123456")).roles("vip1");

    }
}

四、擴展

如果需要在后台接口設置權限,則需要在config配置文件上使用如下注解:

@EnableGlobalMethodSecurity(prePostEnabled = true)

然后直接在contoller的接口方法上添加注解如下:

@PreAuthorize("hasRole('vip1')")


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM