用户授权与认证【springboot security】

用户授权与认证【springboot security】,第1张

用户授权与认证【springboot security】

springboot security
    • 导入依赖
    • 在资源目录里面放入静态资源页面
    • 在Controller包里面放入控制和映射路径
    • 用户认证
    • 授权
    • passwordEncoder源码
    • encode
    • matches
    • roles

在 Spring Boot 中做权限管理,一般来说,主流的方案是 Spring Security ,但是,仅仅从技术角度来说,也可以使用 Shiro。

一般来说,Spring Security 和 Shiro 的比较如下:

Spring Security 是一个重量级的安全管理框架;Shiro 则是一个轻量级的安全管理框架
Spring Security 概念复杂,配置繁琐;Shiro 概念简单、配置简单
Spring Security 功能强大;Shiro 功能简单

虽然 Shiro 功能简单,但是也能满足大部分的业务场景。所以在传统的 SSM 项目中,一般来说,可以整合 Shiro。

在 Spring Boot 中,由于 Spring Boot 官方提供了大量的非常方便的开箱即用的 Starter ,当然也提供了 Spring Security 的 Starter ,使得在 Spring Boot 中使用 Spring Security 变得更加容易,甚至只需要添加一个依赖就可以保护所有的接口,所以,如果是 Spring Boot 项目,一般选择 Spring Security 。

这只是一个建议的组合,单纯从技术上来说,无论怎么组合,都是没有问题的。
关于shiro的学习后面再说
在学习springboot Security我们需要准备

导入依赖
   
            org.springframework.boot
            spring-boot-starter-security
            2.5.5
        
在资源目录里面放入静态资源页面

在Controller包里面放入控制和映射路径
package com.gql.controller;

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


@Controller
public class RouterController {
    @RequestMapping({"/","/index"})
    public String index() {return "index";}

    @RequestMapping("/toLogin")
    public String toLogin(){
        return "views/login";
    }

    @RequestMapping("/level1/{id}")
    public String level1(@PathVariable("id") int id){return "views/level1/"+id;}

    @RequestMapping("/level2/{id}")
    public String level2(@PathVariable("id") int id){return "views/level2/"+id;}

    @RequestMapping("/level3/{id}")
    public String level3(@PathVariable("id") int id){return "views/level3/"+id;}}

用户认证
Public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        //首页都可以访问但是功能页对应有权限的人
        http.authorizeRequests()
                .antMatchers("/").permitAll()
                //这段代码通俗的讲就好像是指定一个人是vip用户,假如这个人是Vip1
                //那么他就可以去访问资源目录下面的/level1
    String encode(CharSequence rawPassword);

    
    boolean matches(CharSequence rawPassword, String encodedPassword);

    
    default boolean upgradeEncoding(String encodedPassword) {
        return false;
    }
}
encode


该方法提供了明文密码的加密处理,加密后密文的格式主要取决于PasswordEncoder接口实现类实例

matches

匹配存储的密码以及登录时传递的密码(登录密码是经过加密处理后的字符串)是否匹配,如果匹配该方法则会返回true.

roles

这就相当于在游戏里面充值,你充值了,我就把你升级成VIP1,你就可以访问level1里面的东西,你继续充钱达到一定值,你就可以变成vip2的用户,你就可以在访问vip1和vip2都能访问的东西。以此类推

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5581822.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-14

发表评论

登录后才能评论

评论列表(0条)

保存