SpringBoot学习(二)—— springboot快速整合spring security组件
admin
2023-02-20 19:20:03
0

Spring Security

简介

spring security的核心功能为认证(Authentication),授权(Authorization),即认证用户是否能访问该系统,和授权用户可以在系统中进行哪些操作。

引入spring security组件

在 pom.xml 中加入


    org.springframework.boot
    spring-boot-starter-security


    org.springframework.security
    spring-security-test
    test

验证组件是否起到作用,现在不更改框架内的任何内容,启动项目,浏览器中依旧输入 http://localhost:8080 ,可看到如下界面,之前可以直接进入spring boot的初始界面,现在已经看不见了,spring security 导入后默认已经开启了验证,必须先登录验证通过后才能访问。

SpringBoot学习(二)—— springboot快速整合spring security组件

如果代码中不做任何设置,默认的账户是 user,默认的密码随着项目的启动,会打印在控制台中。
SpringBoot学习(二)—— springboot快速整合spring security组件

输入账号密码,即可进入默认的初始界面。
SpringBoot学习(二)—— springboot快速整合spring security组件

代码实战

为了最快最简单最直接的认识这个组件,直接把用户密码写入内存中,项目启动即存在,避免还有建表,实体类,数据库操作等与之无关的内容。命名使用最为简单粗暴的方式,排除一切干扰,用最少的精力掌握该组件的使用。

新增代码目录
SpringBoot学习(二)—— springboot快速整合spring security组件

index.html




    
    Title


    SPRING BOOT !!!

error.html




    
    Title


    错误

UserController

package com.example.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@RequestMapping("user")
public class UserController {

    @RequestMapping("/addUser")
    @ResponseBody
    String addUser() {
        return "这是添加用户!!!";
    }

    @RequestMapping("/deleteUser")
    @ResponseBody
    String deleteUser() {
        return "这是删除用户!!!";
    }

    @RequestMapping("/updateUser")
    @ResponseBody
    String updateUser() {
        return "这是修改用户!!!";
    }

    @RequestMapping("/findAllUsers")
    @ResponseBody
    String findAllUsers() {
        return "这是查询用户!!!";
    }

}

UserSecurityConfig

package com.example.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;

//注解开启 Spring Security 安全认证与授权
@EnableWebSecurity
public class UserSecurityConfig extends WebSecurityConfigurerAdapter {

    //用户认证
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        //内存里面放着
        auth.inMemoryAuthentication().passwordEncoder(new MyPasswordEncoder())
                //添加用户,密码,角色
                .withUser("zs").password("123456").roles("AAA")
                //链式编程
                .and()
                .withUser("ls").password("123456").roles("BBB")
                .and()
                .withUser("ww").password("123456").roles("CCC", "primary")
                .and()
                .withUser("zl").password("123456").roles("primary");
    }

    //用户授权
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        /**
         * permitAll():允许一切用户访问
         * hasRole():url请求允许访问的角色
         * hasAnyRole() : url请求允许访问的多个角色
         * access():允许访问的角色,permitAll、hasRole、hasAnyRole 底层都是调用 access 方法
         * access("permitAll") 等价于 permitAll()
         */
        http.authorizeRequests().antMatchers("/").permitAll(); // "/":应用首页所以用户都可以访问
        http.authorizeRequests()
                .antMatchers("/user/addUser").hasRole("AAA") // 首斜杠"/"表示应用上下文,/user/addUser 请求允许 AAA 角色访问
                .antMatchers("/user/deleteUser/**").hasAnyRole("AAA", "BBB") //"/user/deleteUser/**"允许 "AAA", "BBB" 角色访问,/**匹配任意
                .antMatchers("/user/updateUser").hasAnyRole("AAA", "BBB", "CCC")//除了这种链式编程,也可以分开写
                .antMatchers("/user/findAllUsers").access("permitAll");

        http.authorizeRequests().anyRequest().authenticated();

        /**
         * formLogin:指定支持基于表单的身份验证
         * 当用户没有登录、没有权限时就会自动跳转到登录页面(默认 /login)
         * 当登录失败时,默认跳转到 /error
         * 登录成功时会放行
         */
        http.formLogin();
    }

}

MyPasswordEncoder

package com.example.config;

import org.springframework.security.crypto.password.PasswordEncoder;

//密码编码,Spring Security 高版本必须进行密码编码,否则报错
public class MyPasswordEncoder implements PasswordEncoder {
    @Override
    public String encode(CharSequence charSequence) {
        return charSequence.toString();
    }

    @Override
    public boolean matches(CharSequence charSequence, String s) {
        return s.equals(charSequence.toString());
    }
}

亲测效果是

以用户名 zs 登录(其角色权限为AAA),可以进入系统,浏览器输入地址可以访问, localhost:8080,localhost:8080/user/addUser,localhost:8080/user/deleteUser,localhost:8080/user/updateUser,localhost:8080/user/findAllUsers

以用户名 ls 登录(其角色权限为BBB),可以进入系统,浏览器输入地址可以访问, localhost:8080,localhost:8080/user/deleteUser,localhost:8080/user/updateUser,localhost:8080/user/findAllUsers

以用户名 ww 登录(其角色权限为CCC),可以进入系统,浏览器输入地址可以访问, localhost:8080,localhost:8080/user/deleteUser,localhost:8080/user/updateUser,localhost:8080/user/findAllUsers

以用户名 zl 登录(其角色权限为CCC),可以进入系统,浏览器输入地址可以访问, localhost:8080,localhost:8080/user/updateUser,localhost:8080/user/findAllUsers

以用户名 admin 登录,不可以进入系统,因为系统中还没有该用户。

相关内容

热门资讯

今日重磅消息“麻友圈2挪来挪去... 今日重磅消息“麻友圈2挪来挪去.究竟有挂吗?”透视曝光猫腻您好,麻友圈2挪来挪去这个游戏其实有挂的,...
终于明白“微乐福建麻将.有没有... 终于明白“微乐福建麻将.有没有挂?”必胜开挂神器您好,微乐福建麻将这个游戏其实有挂的,确实是有挂的,...
离子能源在盐城发布51Ah车规... 12月21日,固态离子能源科技(武汉)有限公司在盐城举办固态动力电池技术成果发布活动,公司子公司江苏...
今日重大通报“美味冰淇淋.可以... 您好:美味冰淇淋这款游戏可以开挂,确实是有挂的,需要了解加客服微信【9752949】很多玩家在这款游...
终于明白“上海滩.有没有挂?”... 您好:上海滩这款游戏可以开挂,确实是有挂的,需要了解加客服微信【9752949】很多玩家在这款游戏中...
今日重磅消息“新好游炸金花.辅... 网上科普关于“新好游炸金花有没有挂”话题很是火热,小编也是针对新好游炸金花作*弊开挂的方法以及开挂对...
今日重磅消息“琼雀海南麻将.辅... 有 亲,根据资深记者爆料琼雀海南麻将是可以开挂的,确实有挂(咨询软件无需...
今日重大通报“一起温州麻将.开... 有 亲,根据资深记者爆料一起温州麻将是可以开挂的,确实有挂(咨询软件无需...
我来教教您“微竞棋牌.开挂器?... 您好:微竞棋牌这款游戏可以开挂,确实是有挂的,需要了解加客服微信【9752949】很多玩家在这款游戏...
今日重大通报“大富豪app.到... 网上科普关于“大富豪app有没有挂”话题很是火热,小编也是针对大富豪app作*弊开挂的方法以及开挂对...