Spring Security简介

一、用户存储方式:

1、基于内存的用户存储

 @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        /**
         * 1.通过调用inMemoryAuthentication()启用内存用户存储
         * 对于调试和开发人员测试来说,基于内存的用户存储很有用
         */
        auth.inMemoryAuthentication()
                .withUser("user").password("password").roles("USER").and()
                .withUser("admin").password("password").roles("USER", "ADMIN");
    }

2、基于数据库表进行认证

    @Autowired
    private DataSource dataSource;

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
      
        //1.默认的最少配置要求数据库预存储某些表
        auth.jdbcAuthentication().dataSource(dataSource);

        //2.自定义查询
        auth.jdbcAuthentication().dataSource(dataSource)
                .usersByUsernameQuery("select username,password,true from siapp_user where username = ?")
                .authoritiesByUsernameQuery("select username,'ROLE_USER' from siapp_user where username = ?")
                .passwordEncoder(new StandardPasswordEncoder("123456"));

    }

3、基于LDAP进行认证

方法userSearchFilter()和groupSearchFilter()用来为基础LDAP查询提供过滤条件,它们分别用于搜索用户和组,默认情况下,对于用户和组的基础查询都是空的,也就是表明搜索会在LDAP层级结构的根开始。但是我们可以通过指定查询基础来改变这个默认行为:

1)LDAP认证策略

a.默认 进行绑定操作,直接通过LDAP服务器认证用户

b.进行比对操作。将输入的密码发送到LDAP目录上,并要求服务器将这个密码和用户的密码进行比,声明passwordCompare()方法来实现

2)引用远程的LDAP服务器

如果你的LDAP服务器在另一台机器上,那么可以使用contextSource()方法来配置这个地址

3)配置嵌入式的LDAP服务器

通过root()方法指定嵌入式服务器的根前缀

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {

        auth.ldapAuthentication()
                .userSearchBase("ou=people")
                .userSearchFilter("(uid={0})")
                .groupSearchBase("ou=groups")
                .groupSearchFilter("member={0}")
                .passwordCompare()
                .passwordAttribute("passcode");//   passwordAttribute() 声明密码属性的名称

//                .contextSource()
//                .url("http://www.baidu.com")
        
//                 .contextSource()
//                .root("dc=habuma,dc=com")
    }

4.配置自定义的用户服务

实现UserDetailsServic接口,重写loadUserByUsername()方法,根据给定的用户名来查找用户

二、拦截请求

authenticated() 要求在执行请求时,必须时用户已登录
permitAll() 允许的请求 没有任何安全限制
hasRole()限制某个特定的角色
默认配置 要求进入应用的所有http请求都要进行认证,也配置了Spring Security支持基于表单的登录和Http Basic方式的认证
 @Override  
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests().anyRequest().authenticated()
                .and().formLogin()
                .and().httpBasic();
    }

1、使用spring表达式进行安全访问

2、强制通道的安全性

.requiresChannel().antMatchers().requiresSecure()  //需要HTTPS

3、防止跨站请求伪造(CSRF)

Spring Security通过一个同步token的方式来实现CSRF防护的功能。它将会拦截状态变化的请求(例如,非GET、HEAD、OPTIONS和TRACE的请求)并检查CSRF token。如果请求中不包含CSRF token的话,或者token不能与服务器端的token相

匹配,请求将会失败,并抛出CsrfException异常

注意:禁用CSRF防护功能通常来讲并不是一个好主意

四、认证用户

1.formLogin() 启用基本的登录页功能

2.httpBasic() 启用HTTP Basic认证

3.rememberMe()启用Remember-me功能

默认在cookie中存储一个token,最多两周有效

4.退出

用户退出应用,所有的Remember-me token都会被清除掉。在退出完成后,用户浏览器将会重定向到“/login?logout”,从而允许用户进行再次登录。如果你希望用户被重定向到其他的页面,如应用的首页,可通过logoutSuccessUrl()进行设置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值