• Java全栈课程之SpringSecurity详解


    一、简介

            Spring Security 是针对Spring项目的安全框架,也是Spring Boot底层安全模块默认的技术选型,他可以实现强大的Web安全控制,对于安全控制,我们仅需要引入 spring-boot-starter-security 模块,进行少量的配置,即可实现强大的安全管理!

    记住几个类:

    ● WebSecurityConfigurerAdapter: 自定义Security策略
    ● AuthenticationManagerBuilder: 自定义认证策略
    ●@EnableWebSecurity:开启WebSecurity模式

    Spring Security的两个主要目标是“认证”和“授权”(访问控制)。

    “认证”(Authentication)

    “授权”(Authorization)

    这个概念是通用的,而不是只在Spring Security中存在。

    二、用户验证和授权

            1.添加spring-boot-starter-security启动器

    1. <dependency>
    2. <groupId>org.springframework.bootgroupId>
    3. <artifactId>spring-boot-starter-securityartifactId>
    4. dependency>

            2.创建config文件夹,创建SecurityConfig类

    1. import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
    2. import org.springframework.security.config.annotation.web.builders.HttpSecurity;
    3. import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
    4. import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
    5. import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
    6. @EnableWebSecurity
    7. public class SecurityConfig extends WebSecurityConfigurerAdapter {
    8. //授权
    9. @Override
    10. protected void configure(HttpSecurity http) throws Exception{
    11. //首页所有人可以访问 功能页只有对应有权限的人才能访问
    12. http.authorizeRequests().antMatchers("/").permitAll()
    13. //vip1 才能访问1
    14. .antMatchers("/level1/**").hasRole("vip1")
    15. //vip2 才能访问2
    16. .antMatchers("/level2/**").hasRole("vip2")
    17. //vip3 才能访问3
    18. .antMatchers("/level3/**").hasRole("vip3");
    19. //没有权限默认会到登录页面,需要开启登录的页面
    20. http.formLogin();
    21. }
    22. //认证
    23. @Override
    24. protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    25. //正常应该从数据库中读取
    26. auth.inMemoryAuthentication()
    27. .withUser("aaa").password(new BCryptPasswordEncoder().encode("123456")).roles("vip2","vip3")
    28. .and()
    29. .withUser("root").password(new BCryptPasswordEncoder().encode("123456")).roles("vip1","vip2","vip3")
    30. .and()
    31. .withUser("guest").password(new BCryptPasswordEncoder().encode("123456")).roles("vip1");
    32. }
    33. }

    三、注销及权限控制

            1.注销

    1. //注销回到首页
    2. http.logout().logoutSuccessUrl("/");
    3. //没有权限默认会登录页面
    4. http.formLogin().loginPage("/toLogin").usernameParameter("user").passwordParameter("pwd").loginProcessingUrl("/login");

            2.权限控制

                    (1)添加依赖

    1. <dependency>
    2. <groupId>org.thymeleaf.extrasgroupId>
    3. <artifactId>thymeleaf-extras-springsecurity4artifactId>
    4. <version>3.0.4.RELEASEversion>
    5. dependency>

                    (2)修改前端页面添加

    <div class="column" sec:authorize="hasRole('vip1')">

    四、记住我

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

  • 相关阅读:
    内存屏障(Memory Barrier)
    判断用户输入的密码是否正确,如果是123,则为正确,如果不是,就错误
    C语言基础知识入门
    从零开始配置vim(19)——终端配置
    Unity Bolt 实现UI拖拽功能
    食品接触用纸制品与竹木制品的最新标准
    redis高可用之持久化
    JSD-2204-(业务逻辑开发)-续消息队列-Kafka-RabbitMQ-Day15
    Redis与Mysql的数据一致性
    如何保护客户数据并降低合规风险
  • 原文地址:https://blog.csdn.net/Annzz123/article/details/136711428