spring scurity

过滤器与拦截器区别

过滤器与拦截器区别

springSecurity组成

springSecurity是由过滤器链组成 主要用于用户管理与权限验证 UsernamePasswordAuthenticationFilter 是其中一个过滤器主要用于 对post表中做拦截,检验表中数据的用户名与密码

springSecurity配置

DelegatingFilterProxy需要配置(spring boot 不需要) 配置的作用是将所有拦截器加载进来 ** 主要接口:** **userDetalsService:**主要用于对数据库密码,账户的查询 **passwordEncoder :**主要用于对密码的加密 **配置:**可以使用配置文件或者使用配置类设置用户名和密码(但是不实用,无法从数据库获取密码) 第三种配置方式 配置响应接口 配置文件

@Configuration
public class MySecurityConfig extends WebSecurityConfigurerAdapter {
//    实现userDetailsService接口 并将其注入
    @Autowired
    UserDetailsService userDetailsService;
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {

       auth.userDetailsService(userDetailsService).passwordEncoder(password());
    }
//    加密密码
    @Bean
    PasswordEncoder password(){
        return  new BCryptPasswordEncoder();
    }
}

创建dao层user、role 实现多对多的关系 user实现userdetails 在user里面 重写获取授权的权限方法


    @Override
    public Collection<? extends GrantedAuthority> getAuthorities() {
        List<GrantedAuthority> auths = new ArrayList<>();
//        role表示存在的权限
        List<Role> roles = this.getRoles();
        for (Role role : roles) {
            auths.add(new SimpleGrantedAuthority(role.getName()));
        }
        return auths;
    }

使用mybatis 查找数据库密码做到用户管理 配置接口

@Service("userDetailsService")
public class MyUserDetailsService implements UserDetailsService {
    //            使用mybatis查询
    @Autowired
    UserMapper userMapper;

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
//        查询user用户
        comayu.springsecurity.dao.User myuser=userMapper.selectUser(username);
//        判断是否存在
        if(myuser==null){throw  new UsernameNotFoundException("用户不存在");}
//       返回user
        return new User;
    }
}

配置security 登录页,认证权限,关闭csrf 认证,实现注销功能

  @Override
    protected void configure(HttpSecurity http) throws Exception {
      http.formLogin()
              //              配置登录页
              .loginPage("/admin")
//表单里面的地址 需要与 .loginProcessingUrl("")地址相等
              .loginProcessingUrl("/admin/index")
//              成功也
               .successForwardUrl("/admin/index")
//失败也
              .failureUrl("/admin/error").permitAll();
      http.authorizeRequests()
              //              放行首页
              .antMatchers("/admin/login","/admin").permitAll()
//              拦截
              .antMatchers("/admin/**").hasRole("admin")

              .anyRequest().permitAll();

        http.logout()
              .logoutUrl("/admin/logout")
               .permitAll();

      http.csrf().disable();
    }

实现记住我功能 记住我

end
  • 作者:王富贵(联系作者)
  • 发表时间:2021-03-22 04:25
  • 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)
  • 转载声明:如果是转载栈主转载的文章,请附上原文链接
  • 评论