# springSecurity **Repository Path**: Leejning/springSecurity ## Basic Information - **Project Name**: springSecurity - **Description**: springSecurity学习项目,使用springSecurity完成用户登录,以及用户权限管理与无权拦截 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 1 - **Created**: 2019-08-15 - **Last Updated**: 2021-11-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # springSecurity,角色权限管理基本demo 一、使用springSecurity 完成用户登录功能 1、创建自定义 MyUserDetailsService 类 实现 springSecurity提供的UserDetailsService 2、重新UserDetailsService里的方法public UserDetails loadUserByUsername(String username) 3、loadUserByUsername方法主要工作 是查询用户是否存在,若存在查询用户的所有权限并保存在一个实现UserDetails接口的对象User的实 例中(springSecurity原生保存的是角色) 4、编写 WebSecurityConfig 配置类,该类继承WebSecurityConfigurerAdapter,并重写其中的某些方法 (1)重新 protected void configure(AuthenticationManagerBuilder auth)方法,加入自定义配置,如下 auth.userDetailsService(userDetailsService).passwordEncoder(new BCryptPasswordEncoder()); 就是让2中编写的UserDetailsService类,加入工作,BCryptPasswordEncoder密码加密类 (2)重写protected void configure(HttpSecurity http)方法,里面主要完成拦截规则的配置以及添加自定义的拦截器 二、完成权限控制(两种方法) 1、 自定义RbacAuthorityService权限控制类 (简单) 在protected void configure(AuthenticationManagerBuilder auth)方法中添加该类的配置让其生效 配置:.anyRequest().access("@rbacauthorityservice.hasPermission(request,authentication)") 2、 配置自定义拦截器(麻烦) 要实现三个类:AccessDecisionManager、AbstractSecurityInterceptor、 FilterInvocationSecurityMetadataSource 大致权限处理流程: (1)入口是AbstractSecurityInterceptor 类、 (2)调用FilterInvocationSecurityMetadataSource类的getAttributes 取得请求uri对应的权限匹配规则列表(可能匹配多个) (3)调用AccessDecisionManager的decide方法,请求uri对应的权限匹配规则列表作为参数,判断用户是否有权访问