跟我学spring security系列文章第一章 实现一个基本的登入

Posted Java极客技术

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了跟我学spring security系列文章第一章 实现一个基本的登入相关的知识,希望对你有一定的参考价值。

每天精彩原创文章,准时送上



往期文章







跟我学spring security系列文章第一章 实现一个基本的登入


https://github.com/pony-maggie/spring-security-learn

指定依赖

spring boot工程是需要引入spring-boot-starter-security即可

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

安全配置

我们需要自己实现一个类(类名无关)继承WebSecurityConfigurerAdapter ,然后重写里面的方法

@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {

        http.authorizeRequests().antMatchers("/anon1""/anon2").permitAll().anyRequest().authenticated().and()
                .formLogin().loginPage("/login").defaultSuccessUrl("/user").permitAll().and().logout().permitAll();
    }

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication().passwordEncoder(new BCryptPasswordEncoder()).withUser("user")
                .password(new BCryptPasswordEncoder().encode("111111")).roles("USER");
    }
}

对于上面的配置说明如下:

@EnableWebSecurity是必须的,表示开启spring security功能。不加这个注解的话你的应用启动也没问题,但是在configure配置的规则不会生效。

下面会通过例子演示上面的规则是否生效。

configureGlobal不是必须的,但是它可以在内存中创建了一个用户,方便进行演示说明(真实的项目中账户信息是存入数据库的)。因为是入门教程,我们先不把问题复杂化,第一章我并不打算引入UserDetailsService的概念(后面章节会详细讲)。

该用户的名称为user,密码为password,用户角色为USER

在spring security 5.0之前你也可以这样写:

 spring security 5之后就不能用这种方式了,一定要指定密码的加密方法
     @Autowired
     public void configureGlobal(AuthenticationManagerBuilder auth) throws
     Exception 
{
     auth.inMemoryAuthentication().withUser("user").password("111111").roles("USER");
     }

但是spring security 5.0之后一定要指明密码的加密方法(BCryptPasswordEncoder),所以需要写成下面这种方式:

@Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication().passwordEncoder(new BCryptPasswordEncoder()).withUser("user")
                .password(new BCryptPasswordEncoder().encode("111111")).roles("USER");
    }

Spring security 5.0中新增了多种加密方式,也改变了密码的格式。以下是官方文档原话:


The general format for a password is:
{id}encodedPassword
Such that id is an identifier used to look up which PasswordEncoder should be used and encodedPassword is the original encoded password for the selected PasswordEncoder. The id must be at the beginning of the password, start with { and end with }. If the id cannot be found, the id will be null. For example, the following might be a list of passwords encoded using different id. All of the original passwords are "password".
{bcrypt}跟我学spring security系列文章第一章 实现一个基本的登入10跟我学spring security系列文章第一章 实现一个基本的登入e0801跟我学spring security系列文章第一章 实现一个基本的登入OAOec05+bXxvuu/1qZ6NUR+xQYvYv7BeL1QxwRpY5Pc=

{sha256}97cde38028ad898ebc02e690819fa220e88c62e0699403e94fff291cfffaf8410849f27605abcbc0

另外需要注意的是,必须至少指定一个角色,否则会报错

java.lang.IllegalArgumentExceptionCannot pass a null GrantedAuthority collection

添加controller测试代码

首先我们再controller里定义几个接口,方便我们一会再浏览器进行测试,添加几个网页,只显示基本的提示信息,能让你明白基本的跳转流程即可。

@Controller
public class TestController {

    @RequestMapping({"/anon1","/anon2"})
    public String anon() {
        return "anon";
    }

    @RequestMapping("/login")
    public String login() {
        return "login";
    }

    @RequestMapping("/")
    public String index() {
        return "index";
    }

    @RequestMapping("/user")
    public String user() {
        return "user";
    }

}

测试

启动工程,进行如下测试:

  1. 访问首页,http://localhost:9090,需要授权,会自动跳入登录页:http://localhost:9090/login

  2. 访问http://localhost:9090/anon1,http://localhost:9090/anon2,可以不用登录直接访问

  3. 访问用户页:http://localhost:9090/user,也需要授权,会自动跳入登录页:http://localhost:9090/login

  4. 从登录页输入用户名和密码(user/111111),进入用户主页


End


如有收获,请帮忙转发,您的鼓励是作者最大的动力!

跟我学spring security系列文章第一章 实现一个基本的登入


《Java 极客技术》知识星球限时优惠,现在加入只需 50 元,仅限前 1000 名,机不可失时不再来。长按识别下面的二维码即可加入,趁早行动吧!


跟我学spring security系列文章第一章 实现一个基本的登入


跟我学spring security系列文章第一章 实现一个基本的登入




热爱Java的技术人倾囊相授



以上是关于跟我学spring security系列文章第一章 实现一个基本的登入的主要内容,如果未能解决你的问题,请参考以下文章

跟我学习Spring Security--在线宠物商店开发

跟我学习Spring Security--在线宠物商店开发

跟我学习Spring Security--在线宠物商店开发

跟我学习Spring Security--在线宠物商店开发

第一章 Shiro简介——《跟我学Shiro》(转)

第一章 Shiro简介——《跟我学Shiro》