SpringSecurity入门

1.创建springBoot项目

添加springframework资源

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

由于jdk版本是1.8的所以需要把java.version更改,更改java1.8的后springboot就要改成2.几的,3.几的是java11以上用的

1.2创建第一个测试资源项目

启动启动类后进入Hello页面会跳转到login

默认name是user,password在后台

2. 自定义账户和密码

我们刚才使用的是security自带的账户和密码。 我们也可以自己定义账户和密码。

2.1 在application.properties中定义

# 自定义security的账户和密码--不会帮你生成密码了
spring.security.user.name=admin
spring.security.user.password=123456

注意: 这种方式只能定义一个账户和密码。

2.2 自定义多个账户和密码

配置类基础extends WebSecurityConfigurerAdapter然后重写configure(AuthenticationManagerBuilder auth)

在配置文件中,只能定义一个账户和密码。 我们可以定义一个配置类,完成多个账户和密码的定义。

@Configuration
public class MySecurityConfig extends WebSecurityConfigurerAdapter {
​
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication() //基于内存创建的账户 未来我们可以基于数据库
                .withUser("zhangsan") //账号名
                .password("123456") //密码
                .roles("admin") //具有的角色
                .and() //连接符
                .withUser("lisi")
                .password("123456")
                .roles("test")
        ;
    }
}

如果使用了配置类,那么原来在配置文件中自定义的账户和密码就不会

 

需要指定它的密码加密器。

3. 密码加密器

可以把明文转化为密文 encode, 同时可以进行密码的匹配。matches

public static void main(String[] args) {
        //创建了密码加密器
        PasswordEncoder passwordEncoder=new BCryptPasswordEncoder();
        //加密功能
        String encode = passwordEncoder.encode("123456"); //把明文加密后生成了密文。
​
        //密码匹配  第一个参数: 客户输入的明文   第二个参数: 数据库中存在的密文
        boolean matches = passwordEncoder.matches("1234567", encode);
        System.out.println(matches);
    }

对称加密 和 非对称加密

对称加密 加密和解密使用的密钥都是同一个。 --可以破解。

非对称加密: 加密和解密使用的密钥不是同一个。---无法破解。MD5加密 SH512加密

4. 获取当前用户的信息

当前登录成功者的信息。

思考: 从session中获取。setAttribute(key,value); getAttribute(key);

security默认把当前用户信息保存SecurityContext对象中

    @GetMapping("/info")
    public Authentication info(){
        //把当前用户信息保存在SecurityContext类中。
        SecurityContext securityContext = SecurityContextHolder.getContext();
        //把当前用户信息封装到Authentication类中。账户 密码 权限  角色等信息
        Authentication authentication = securityContext.getAuthentication();
        return authentication;
    }

security框架会把当前用户信息封装到Authentication中,并把该类对象存放到SecurityContext中。

5. 修改security的默认配置

5.1 修改它的登录页面

默认security提供了一个登录页面, 如果不想使用它提供的页面,我们可以指定我们自己的登录页面。

1.自己在static目录下创建一个登录页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<!--注意: 提交路径action必须为login 提交方式必须为post.
          input的名称必须为username和password
-->
        <form action="/login" method="post">
            账户:<input type="text" name="username"/><br>
            密码:<input type="password" name="password"/><br>
            <input type="submit"/>
        </form>
</body>
</html>

2.修改Security配置类

 @Override
    protected void configure(HttpSecurity http) throws Exception {
        //设置表单登录信息
          http.formLogin()
                  .loginPage("/login.html") //设置自己的登录界面
                   
                  //.usernameParameter("name") //设置表单的账户名称 默认为usernae
                   .permitAll(); //允许放行
​
        //禁用跨域伪造请求的验证
        http.csrf().disable();
        //其他请求路径都要认证
        http.authorizeRequests().anyRequest().authenticated();
    }

5.2 设置登录成功跳转的页面

默认登录成功跳转 / 或原来的访问路径。

1.修改security配置类

2.创建SuccessController类

@Controller
public class SuccessController {
​
    @PostMapping("/success")
    public String success(){
        return "redirect:/success.html";
    }
}

3.创建成功页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
登录成功
</body>
</html>

登录失败指定跳转路径

.failureUrl("/failureurl.html")
  • 31
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值