Spring-Security权限控制以及登录注销的使用以及相关的问题

本文介绍了Spring Security的初步使用,包括配置安全设置、处理404错误、用户认证与授权,以及集成Thymeleaf实现页面权限控制。在使用Spring Security的logout功能时,发现必须禁用csrf保护才能正常工作。项目结构清晰,配置文件展示了如何设置首页、不同权限页面的访问控制,以及登录、注销和记住我功能。文章还展示了部分前端页面和登录效果。
摘要由CSDN通过智能技术生成

废话不多说,开始总结学习的Spring-Security以及在使用过程中遇到的一些问题,使用过程中用到的有thymeleaf

1.遇到的问题(尚未解决)

就是在使用spring-security里面内置的logout的时候会提示404,只有http.csrf().disable();//关闭csrf功能才能正常使用,不关闭无法使用内置的logout注销。
在这里插入图片描述

下面开始进入正题!Spring-Security初使用~

2.导入依赖

<!--相关依赖-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
    <groupId>org.thymeleaf.extras</groupId>
    <artifactId>thymeleaf-extras-springsecurity5</artifactId>
</dependency>

3.项目结构

在这里插入图片描述

4.Security相关配置以及使用

  • SecurityConfig.java
@EnableWebSecurity
public class SecurityConfig  extends WebSecurityConfigurerAdapter {
    //链式编程
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        //首页所有人可以访问,但是功能页只有对应有权限的人才能访问
        http.authorizeRequests()
                .antMatchers("/").permitAll()
                .antMatchers("/level1/**").hasRole("vip1")
                .antMatchers("/level2/**").hasRole("vip2")
                .antMatchers("/level3/**").hasRole("vip3");

    //    没有权限默认会到登录页面
        http.formLogin().loginPage("/toLogin");
    //    防止网站攻击
    //     http.csrf().disable();//关闭csrf功能
    //    开启注销功能
        http.logout().logoutSuccessUrl("/");

    //    开启记住我功能
        http.rememberMe().rememberMeParameter("remember");
    }

    //认证,在springboot 2.1.x中可以直接使用
    //密码编码passwordEncoder
    //在spring Security 5.0+ 新增了很多加密方式
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        //这些数据正常应该从数据库中获取
        auth.inMemoryAuthentication().passwordEncoder(new BCryptPasswordEncoder())
        //配置用户权限
                .withUser("admin").password(new BCryptPasswordEncoder().encode("123456")).roles("vip2","vip1","vip3")
                .and()
                .withUser("vip1").password(new BCryptPasswordEncoder().encode("vip1")).roles("vip1");
    }
}
  • controller.java
    @RequestMapping({"/","/index"})
    public String index(){
        return "index";
    }
    @RequestMapping("/toLogin")
    public String toLogin(){
        return "views/login";
    }
    @RequestMapping("/level1/{id}")
    public String level1(@PathVariable("id") int id){
        return "views/level1/"+id;
    }
    @RequestMapping("/level2/{id}")
    public String level2(@PathVariable("id") int id){
        return "views/level2/"+id;
    }
    @RequestMapping("/level3/{id}")
    public String level3(@PathVariable("id") int id){
        return "views/level3/"+id;
    }

前端页面就不过多的展示了,只展示部分

index.html(thymeleaf跟security有很好的支持)
在这里插入图片描述

5. 效果展示

  • 1.未登录
    在这里插入图片描述
  • 2.登录admin用户
    在这里插入图片描述
  • 3.登录vip用户
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值