温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何使用Java SpringBoot安全框架去整合Spring Security

发布时间:2021-09-14 11:28:54 来源:亿速云 阅读:102 作者:柒染 栏目:开发技术

如何使用Java SpringBoot安全框架去整合Spring Security,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

    1.工业级安全框架介绍

    Spring Security基于Spring开发,项目中如果使用Spring作为基础,配合Spring Security做权限更加方便,而Shiro需要和Spring进行整合开发。因此作为spring全家桶中的Spring Security在java领域很常用。

    2.建议搭建Spring Security环境

    2.1在pom.xml中添加相关依赖

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>org.example</groupId>
        <artifactId>springsecurityReview</artifactId>
        <version>1.0-SNAPSHOT</version>
        <parent>
            <artifactId>spring-boot-dependencies</artifactId>
            <groupId>org.springframework.boot</groupId>
            <version>2.5.4</version>
        </parent>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-security</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-thymeleaf</artifactId>
            </dependency>
        </dependencies>
    </project>

    2.2创建Handler类

    package com.example.controller;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.GetMapping;
    @Controller
    public class Handler {
        @GetMapping("/index")
        public String index(){
            return "index";
        }
    }

    2.3创建简单的html和配置相关thymeleaf的路径

    如何使用Java SpringBoot安全框架去整合Spring Security

    2.4最后再加个启动类,那么我们的整合测试就完成勒

    package com.example;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    @SpringBootApplication
    public class Application {
        public static void main(String[] args) {
            SpringApplication.run(Application.class,args);
        }
    }

    2.5成果展示 用户名默认user,密码则随机生成的这串数字

    如何使用Java SpringBoot安全框架去整合Spring Security

    如何使用Java SpringBoot安全框架去整合Spring Security

    3.进阶版使用

    3.1用户名和密码自定义

    如何使用Java SpringBoot安全框架去整合Spring Security

    3.2在config包下创建Encoder

    进行密码的校验和转码操作,将密码转成字符串形式,并通过match方法惊醒校验。

    如何使用Java SpringBoot安全框架去整合Spring Security

    3.3赋予账号角色权限

    package com.example.config;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
    import org.springframework.security.config.annotation.web.builders.HttpSecurity;
    import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
    @Configuration
    public class SecurityConfig extends WebSecurityConfigurerAdapter {
        //角色和资源的关系
        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http.authorizeRequests().antMatchers("/admin").hasRole("ADMIN")
            .antMatchers("/index").access("hasRole('ADMIN') or hasRole('USER') ")
                    .anyRequest().authenticated()
            .and()
            .formLogin()
            .loginPage("/login")
            .permitAll()
            .and()
            .logout()
            .permitAll()
            .and()
            .csrf()
            .disable();
        }
        @Override
        protected void configure(AuthenticationManagerBuilder auth) throws Exception {
           auth.inMemoryAuthentication().passwordEncoder(new MyPasswordEncoder())
           .withUser("user").password(new MyPasswordEncoder()
           .encode("000")).roles("USER")
           .and()
           .withUser("admin").password(new MyPasswordEncoder()
           .encode("123")).roles("ADMIN","USER");
        }
    }

    最后达到admin账号能访问admin.html和index.html

    user只能访问index.html的操作

    看完上述内容,你们掌握如何使用Java SpringBoot安全框架去整合Spring Security的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!

    向AI问一下细节

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

    AI