StringSrcurity的基本概念

一、基本概念 

1、认证:确定使用者是否有权限,判断身份是否合法,基于用户名密码、二维码、短信验证码等

2、会话:为了避免用户每次操作都认证,让用户在登录一次后创建一个会话,在特定时间内,就不需要认证了,基于session、token等

3、授权:使用者是否对资源拥有权限,控制不同用户访问不同资源

授权的数据模型

简单理解为Who对What进行How操作。Who:主题、What:资源、How:权限(数据、功能)。

RBAC 

  • 基于角色的访问:判断主体是否有某些角色,当角色改变,可能要修改
  • 基于资源的访问:判断主体是否有访问资源的权限

二、基于Session的认证方式

1、认证流程:采用servlet规范,认证成功后,服务端给客户端返回sessionId,客户端存放到cookie中。

2、认证方式就是简单的流程登陆、采用过滤器进行权限方式拦截

三、基于String Security

1、spring security 提供了拦截器,用于权限校验,需要在配置文件或者配置类中进行配置

2、spring security 提供了登陆(login)、退出登陆(logout)页面,都是可以自定义的

3、spring security 提供了用户校验的功能,但是需要开发者提供一个UserDetailsService,主要作用就是给spring security返回用户信息,让其进行校验,同时定义密码编译器 4、初始化spring security 环境

5、spring security 授权,无权限返回都是403

四、spring boot 集成 spring security

只要引入,即可:

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

简单的配置类:

package com.example.demo.conf;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
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.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.crypto.password.NoOpPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;

/**
 * spring security configuration
 */
@EnableWebSecurity
@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Bean
    @Override
    public UserDetailsService userDetailsService(){
        InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();
        //在内存中创建几个用户,正常应该自己些
        manager.createUser(User.withUsername("zhangsan").password("123").authorities("p1").build());
        manager.createUser(User.withUsername("lisi").password("456").authorities("p2").build());
        return manager;
    }

    /**
     * 密码的编码方式
     * @return
     */
    @Bean
    public PasswordEncoder passwordEncoder(){
        return NoOpPasswordEncoder.getInstance();
    }

    /**
     * 一些简单权限配置
     * @param http
     * @throws Exception
     */
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                //访问 /r/r1 的用户必须有p1 权限
                .antMatchers("/r/r1").hasAnyAuthority("p1")
                //访问 /r/r2 的用户必须有p2 权限
                .antMatchers("/r/r2").hasAnyAuthority("p2")
                //所有的 /r开头的请求都进行权限验证
                .antMatchers("/r/**").authenticated()
                //都放行
                .anyRequest().permitAll()
                .and()
                //登陆可以使用表单提交
                .formLogin()
                //成功后跳转的地址
                .successForwardUrl("/login-success");
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值