Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >在Spring Boot中使用Spring Security实现权限控制

在Spring Boot中使用Spring Security实现权限控制

作者头像
ydymz
发布于 2018-09-10 07:21:12
发布于 2018-09-10 07:21:12
93800
代码可运行
举报
文章被收录于专栏:lgp20151222lgp20151222
运行总次数:0
代码可运行

丢代码地址

https://gitee.com/a247292980/spring-security

再丢pom.xml

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</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>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.thymeleaf.extras</groupId>
            <artifactId>thymeleaf-extras-springsecurity4</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.40</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.44</version>
        </dependency>

 最后放个代码结构图

开讲

WebSecurityConfig

spring sercurity的设置。

要有一个实现了UserDetailsService的bean,我的是CustomUserService。

之后,重写两个configure的方法。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    @Override
    protected void configure(AuthenticationManagerBuilder authenticationManagerBuilder) throws Exception {
        authenticationManagerBuilder.userDetailsService(customUserService());
    }

    /**
     * 1.首先当我们要自定义Spring Security的时候我们需要继承自WebSecurityConfigurerAdapter来完成,相关配置重写对应 方法即可。
     * 2.我们在这里注册CustomUserService的Bean,然后通过重写configure方法添加我们自定义的认证方式。
     * 3.在configure(HttpSecurity http)方法中,我们设置了登录页面,而且登录页面任何人都可以访问,然后设置了登录失败地址,也设置了注销请求,注销请求也是任何人都可以访问的。
     * 4.permitAll表示该请求任何人都可以访问,.anyRequest().authenticated(),表示其他的请求都必须要有权限认证。
     * 5.这里我们可以通过匹配器来匹配路径,比如antMatchers方法,假设我要管理员才可以访问admin文件夹下的内容,我可以这样来写:.
     * antMatchers("/admin/**").hasRole("ROLE_ADMIN"),也
     * 可以设置admin文件夹下的文件可以有多个角色来访问,写法如下:
     * .antMatchers("/admin/**").hasAnyRole("ROLE_ADMIN","ROLE_USER")
     * 6.可以通过hasIpAddress来指定某一个ip可以访问该资源,假设只允许访问ip为210.210.210.210的请求获取admin下的资源,写法如下.a
     * ntMatchers("/admin/**").hasIpAddress("210.210.210.210")
     */
    @Override
    protected void configure(HttpSecurity httpSecurity) throws Exception {
        httpSecurity.authorizeRequests()
//                留意代码顺序
//                首页(不需要登陆就能访问的页面
                .antMatchers("/index").permitAll()
                .anyRequest().authenticated()
//                需要登陆才能访问的页面
                .and().formLogin().loginPage("/login").defaultSuccessUrl("/index").failureUrl("/login?error").permitAll()
                .and().logout().logoutUrl("/logout").logoutSuccessUrl("/login").permitAll()
                .and().rememberMe().tokenValiditySeconds(60 * 60 * 24 * 7).key("kkkkkkkk");
    }

 HomeController,BaseEntity,Msg,SysRole

不用多说了,简单的mvc

SysUser

要实现UserDetails接口,重写getAuthorities方法。

里面有个@ManyToMany,虽然代码不配置也行,但这是将两个表关联起来的逻辑。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Entity
public class SysUser extends BaseEntity implements UserDetails {
    @Id
    @GeneratedValue
    private Long id;
    private String username;
    private String password;
    /**
     * CascadeType.REFRESH:级联刷新,当多个用户同时作操作一个实体,为了用户取到的数据是实时的,
     * 在用实体中的数据之前就可以调用一下refresh()方法!
     * FetchType.EAGER:急加载,立即从数据库中加载
     */
    @ManyToMany(cascade = {CascadeType.REFRESH}, fetch = FetchType.EAGER)
    private List<SysRole> roles;

    public void setId(Long id) {
        this.id = id;
    }

    public Long getId() {
        return this.id;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    @Override
    public String getUsername() {
        return this.username;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String getPassword() {
        return this.password;
    }

    public void setRoles(List<SysRole> roles) {
        this.roles = roles;
    }

    public List<SysRole> getRoles() {
        return this.roles;
    }

    @Override
    public Collection<? extends GrantedAuthority> getAuthorities() {
        List<GrantedAuthority> grantedAuthorityList = new ArrayList<>();
        List<SysRole> sysRoleList = this.getRoles();
        for (SysRole sysRole : sysRoleList) {
            grantedAuthorityList.add(new SimpleGrantedAuthority(sysRole.getName()));
        }
        return grantedAuthorityList;
    }


    @Override
    public boolean isAccountNonExpired() {
        return true;
    }

    @Override
    public boolean isAccountNonLocked() {
        return true;
    }

    @Override
    public boolean isCredentialsNonExpired() {
        return true;
    }

    @Override
    public boolean isEnabled() {
        return true;
    }
}

 SysUserRepository

spring-jpa的简单应用

CustomUserService

实现loadUserByUsername的方法,就是传说中的认证方法了,为啥不叫authorize啊?这名字太low了吧。

SpringSecurityApplication

不懂这个的,没关系新建spring boot自带的。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-01-19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Spring Security
springBoot 2.5.5 + Mybatis + Spring Security 5.x
P轴
2022/11/18
8020
Spring Security (二) Guides
上一篇文章《Spring Security(一)--Architecture Overview》,我们介绍了Spring Security的基础架构,这一节我们通过Spring官方给出的一个guides例子,来了解Spring Security是如何保护我们的应用的,之后会对进行一个解读。 2 Spring Security Guides 2.1 引入依赖 <dependencies> <dependency> <groupId>org.springframework.boot</g
程序猿DD
2018/02/01
1.1K0
Spring Security (二) Guides
SpringBoot+SpringSecurity+JWT实RESTfulAPI权限控制
根据文章内容总结的摘要
林老师带你学编程
2018/01/04
4.2K0
SpringBoot+SpringSecurity+JWT实RESTfulAPI权限控制
springboot系列学习(二十四):springboot项目里面整合spring Security框架。一步一步带你整合使用,小白必看(一)
我们的一个普通项目,没有安全的限制也是可以使用的,但是在公司里面,安全就是必须的,不是说非要使用安全框架springsecurity框架。之前我们学过的过滤器,拦截器也是可以实现一定的项目的安全。
一写代码就开心
2020/11/20
7950
springboot系列学习(二十四):springboot项目里面整合spring  Security框架。一步一步带你整合使用,小白必看(一)
Spring Security OAuth2实现单点登录
在本教程中,我们将讨论如何使用 Spring Security OAuth 和 Spring Boot 实现 SSO(单点登录)。
朝雨忆轻尘
2019/06/18
2.5K0
Springboot整合Security
注意:springboot2.0.9版本以后的不支持security标签,我们需要下降版本才能看到效果
JokerDJ
2023/11/27
1810
Springboot整合Security
Spring boot+Spring security+JJWT 实现restful风格的权限验证
https://github.com/MarkGao11520/spring-boot-security-restful
Meet相识
2018/09/12
3.6K2
SpringBoot集成Spring Security(1)——入门程序
因为项目需要,第一次接触 Spring Security,早就听闻 Spring Security 功能强大但上手困难,学习了几天出入门道,特整理这篇文章希望能让后来者少踩一点坑(本文附带实例程序,请放心食用)
全栈程序员站长
2022/09/09
8370
SpringBoot集成Spring Security(1)——入门程序
使用SpringSecurity
前几天写了一个SpringBoot对拦截器的使用,在实际项目中,对一些情况需要做一些安全验证,比如在没有登录的情况下访问特定的页面应该解释的拦截处理。这一篇介绍使用SpringSecurity来做简单
dalaoyang
2018/06/11
7110
Spring Boot整合新版Spring Security:Lambda表达式配置优雅安全
Spring Security是一个用于身份验证和授权的框架,它提供了一套全面的安全服务,可轻松集成到Spring应用程序中。新版Spring Security引入了lambda表达式的配置方式,取代了之前的繁琐XML配置和方法调用链式配置,使得配置更加清晰、简洁。
IT_陈寒
2024/05/24
2200
Spring Boot整合新版Spring Security:Lambda表达式配置优雅安全
(七) SpringBoot起飞之路-整合SpringSecurity(Mybatis、JDBC、内存)
(五) SpringBoot起飞之路-Thymeleaf模板引擎整合及基本用法总结
BWH_Steven
2020/06/29
1.2K0
Spring Boot Admin 快速接入
服务端 直接访问项目位置即可,如127.0.0.1:8080 即可登录Spring Boot Admin
收心
2022/01/19
9490
Spring Boot Admin 快速接入
SpringBoot与安全(Spring Security)
​ SpringSecurity 是针对 Spring 项目的安全框架,也是 Spring Boot 底层安全模块的技术选项。他可以实现强大的 web 安全控制。对于安全控制,我们需要引入 spring-boot-starter-securiy 模块。
OY
2022/03/12
7450
SpringBoot与安全(Spring Security)
Spring Security 基于数据库的认证
[wp_editor_md_c80226e17602863cd62006de14c028b6.jpg]
mySoul
2020/06/19
4930
【Spring Boot】011-SpringSecurity(安全)
Spring Security 是 Spring 家族中的一个安全管理框架,实际上,在 Spring Boot 出现之前,Spring Security 就已经发展了多年了,但是使用的并不多,安全管理这个领域,一直是 Shiro 的天下。
訾博ZiBo
2025/01/06
800
【Spring Boot】011-SpringSecurity(安全)
Spring Boot + Security-01基于内存认证
代码地址:https://github.com/zhangpu1211/Spring-Security-Demos
听城
2020/02/24
7680
SpringSecurity入坑(一)
整体使用内存做授权验证, 后续整理基于JDBC 做权限授权,整体一套下来的话,基本上对于springsecurity有一个基本的了解,入坑第一步建议以基础入手,大部分的配置建议查看官方源码 ,对于登出以及记住密码,细节在 源码HttpSecurity类中有详细说明,这里不做过多的说明。只提供基础的Demo示例
是小张啊喂
2021/04/06
3980
Spring Security 简单使用教程
Spring Security 是一个强大的、安全性框架,用于保护 Spring 应用程序。本文将详细介绍如何在一个 Spring Boot 项目中使用 Spring Security,从基础配置到自定义安全需求。
繁依Fanyi
2024/06/17
3060
Spring boot项目集成security
在进行框架选型时最常用的选择就是在Spring security 和Shiro中进行抉择,Spring security 和 shiro 一样,都具有认证、授权、加密等用于权限管理的功能。但是对于Springboot而言,Spring Security比Shiro更合适一些,他们都是Spring生态里的内容,并且在使用上Spring boot只需要引入Security就可以实现基础的登陆验证。
余生大大
2022/11/02
3740
Spring boot项目集成security
Spring 全家桶之 Spring Security(三)
自定义类SysUser类代替Spring Security中的UserDetails类,实现UserDetails中的方法, 放在entity包中,同时新增实体类SysRole
RiemannHypothesis
2022/08/19
5600
Spring 全家桶之 Spring Security(三)
相关推荐
Spring Security
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档