zoukankan      html  css  js  c++  java
  • spring-security

    参考教程地址

    认证过程

    1. 用户使用账号密码登陆
    2. springsecurity将接收到的登陆信息封装成实现了Authentication 接口的UsernamePasswordAuthenticationToken
    3. 将产生的token对象传给AuthenticationManager进行登陆认证
    4. AuthenticationManager认证成功后,会返回一个封装了用户权限信息的Authentication对象
    5. 通过调用 SecurityContextHolder.getContext().setAuthentication(…) 将 AuthenticationManager 返回的 Authentication 对象赋予给当前的 SecurityContext

    验证流程

    • ChannelProcessingFilter
    • SecurityContextPersistenceFilter
    • ConcurrentSessionFilter
    • 实现Filter接口的验证类
    • SecurityContextHolderAwareRequestFilter
    • JaasApiIntegrationFilter
    • RememberMeAuthenticationFilter
    • AnonymousAuthenticationFilter
    • ExceptionTransactionFilter
    • FilterSecurityInterceptor

    与springboot集

    指定拦截的url

    • antMatchers :configure(HttpSecurity httpSecurity) 中增加antMatchers
    • @PreAuthorize注解 :具体方法上增加PreAuthorize注解如下:
    @PreAuthorize("hasAnyRole('ADMIN','MENU_ALL','MENU_SELECT','ROLES_ALL','USER_ALL','USER_SELECT')")

    方法级安全使用诸如@PreAuthorize、@PostAuthorize 、@ Secured 注解来实现。

    要想使 @PreAuthorize 注解生效,需要继承 WebSecurityConfigurerAdapter 配置类上添加 @EnableGlobalMethodSecurity注解部分代码如下

    @Configuration
    @EnableWebSecurity
    @EnableGlobalMethodSecurity(prePostEnabled = true)
    public class SecurityConfig extends WebSecurityConfigurerAdapter {

    上面的 prePostEnabled :确定 Spring Security 前置注释 [@PreAuthorize,@PostAuthorize,..] 是否应该启用

    认证处理机制

    • BasicAuthenticationFilter(basic)
    • UsernamePasswordAuthenticationFilter(用户密码)
    • jwt(自定义jwt的方式)

    maven引用

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

    security配置

    继承WebSecurityConfigurerAdapter,然后重写两个configur

    	public void configure(WebSecurity web) throws Exception {
    	}
    	protected void configure(HttpSecurity http) throws Exception {
    		http
    			.authorizeRequests()
    				.anyRequest().authenticated()
    				.and()
    			.formLogin().and()
    			.httpBasic();
    	}

    数据库表结构设计

    用户角色权限相关表

    • user 用户信息表
    字段名字段类型非空注释
    idbigint(20)ID
    avatarvarchar头像链接
    create_timedatetime创建时间
    emailvarchar邮箱
    enabledbigint是否启用
    usernamevarchar用户名
    passworvarchar密码
    last_password_reset_timedatetime最后修改密码时间
    • users_roles 用户角色关系表
    字段名 字段类型 非空 注释
    user_idbigint(20)用户ID
    role_id bigint(20)角色ID
    • role 角色表
    字段名 字段类型 非空 注释
    idbigint角色id
    create_timedatetime创建时间
    namevarchar角色名称
    remarkvarchar备注
    • roles_permissions 角色权限关系表
    字段名 字段类型 非空 注释
    role_idbigint角色ID
    permission_idbigint权限ID
    • permission 权限表
    字段名 字段类型 非空 注释
    idbigint
    aliasvarchar别名
    create_timedatetime创建时间
    namevarchar名称
    pidint上级权限
    • 示例数据

    菜单设计与展

    • menu 菜单表
    字段名 字段名类型是否非空备注
    idbigint
    create_timedatetime 创建日期
    namevarchar菜单名称
    componentvarchar组件
    pidbigint上级菜单ID
    sortbigint排序
    iconvarchar图标
    pathvarchar链接地址
    i_framebit是否外链
    menu表 查询结果示例
  • 相关阅读:
    mysql where条件通过 regexp 正则来匹配查询数据
    mysql 面试实战
    mysql 面试
    MySQL常见面试题
    mysql面试
    Groovy安装
    Redis-(error) MISCONF Redis is configured to save RDB snapshots
    ubuntu 下openoffice安装
    Android 多屏幕适配 dp和px的关系
    linux 相关知识
  • 原文地址:https://www.cnblogs.com/falcon-fei/p/11060065.html
Copyright © 2011-2022 走看看