参考教程地址

认证过程

  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表 查询结果示例
posted on 2019-06-20 17:29  falcon_fei  阅读(157)  评论(0编辑  收藏  举报