千家信息网

怎样进行添加Spring-Security支持

发表于:2025-01-31 作者:千家信息网编辑
千家信息网最后更新 2025年01月31日,怎样进行添加Spring-Security支持,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。添加maven依赖:添加配置:新建包conf
千家信息网最后更新 2025年01月31日怎样进行添加Spring-Security支持

怎样进行添加Spring-Security支持,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

添加maven依赖:

添加配置:

新建包config:SecurityConfig继承于WebSecurityConfigurerAdapter.

configure(HttpSecurity http)方法: 在该方法内配置web路径和对应的权限

http.authorizeRequests().antMatchers(...): 配置web路径

permitAll(),.hasRole(),.hasAnyRole: 配置web路径对应的权限.

例如: .antMatchers("/manage/**").hasRole("ADMIN")

表示路径/manage下的所有地址和资源,需要具有ROLE_ADMIN角色的用户才能访问.

.formLogin().loginPage("/login") // 指定了登录页面

.successForwardUrl("/sign_in").failureUrl("/sign_in")

指定spring-security认证完成(成功/失败)后回调的路径(GET),该路径通常是我们自己的controller方法,方法里可以定义登录反馈,具体见项目代码.

.logout().logoutRequestMatcher(new AntPathRequestMatcher("/logout")).logoutSuccessUrl("/").permitAll(): 定义注销的路径,并且所有用户都可访问该方法.

configure(AuthenticationManagerBuilder auth): 在该方法内配置自定义的安全认证类

auth.authenticationProvider(securityEncrypt): 自定义认证

auth.userDetailsService(customUserService): 自定义认证用户信息服务

至此,路径已经具备安全特性了.下面介绍登录认证和用户角色资源管理

登录认证流程:

SecurityConfig.configure: 查找用户认证提供者->SecurityEncrypt

SecurityEncrypt.authenticate: 认证用户凭证

CustomUserService.loadUserByUsername: 加载用户数据库用户信息

密码匹配:

失败: 抛出认证异常

成功: 返回认证用户信息

实际项目中的密码是经过加密的,所以需要自定义认证方案,本项目使用BCrypt加密方式,具体代码见EncryptUtil工具类.

创建类: SecurityEncrypt,自定义认证

authenticate(Authentication authentication): 该方法将对用户输入信息进行匹配

authentication.getName(): 用户输入的用户名

authentication.getCredentials(): 用户输入的密码

UserDetails user = userService.loadUserByUsername(username): 通过用户名加载数据库用户信息

认证完成后(成功/失败)回调 /sign_in.

创建类: CustomUserService,自定义加载数据库用户信息,同时加载用户的角色和角色对资源的访问权限信息.

配置认证完成后的操作:

principal: 已认证对象,null表示认证失败

SPRING_SECURITY_SAVED_REQUEST: spring-security保存到session中的属性,保存了认证前的页面.如果该属性不为null,可以传递给页面让js跳转,即实现了认证后跳转到认证前的页面.

配置某个方法的访问权限:

@PreAuthorize: 在方法执行前将会检查用户是否具有对应的权限,可选值:

Thymeleaf页面中配置权限: hello.html

xmlns:sec="http://www.thymeleaf.org/extras/spring-security": 导入security标签

sec:authorize="hasRole('USER')": 显示该对象需要具有该权限

github项目中,我定义了两个用户角色和两个资源访问权限

角色(Roles): 注意: spring-security中用户角色默认前缀是ROLE_,后面配置时不要加.

ROLE_USER: 表示已登录用户,注册用户时自动赋予该角色

ROLE_ADMIN: 目前项目中的最高权利角色

角色权限(Privilege)

user:* 表示已注册用户资源访问权限,对应ROLE_USER

global:* 表示最高权限,该类型用户可以访问所有资源,对应ROLE_ADMIN

项目启动时会自动初始化相关权限.

本项目添加了简要的后台管理,用以保存公众号的文章信息

看完上述内容,你们掌握怎样进行添加Spring-Security支持的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

用户 认证 权限 方法 角色 配置 信息 路径 项目 资源 页面 登录 成功 密码 数据 数据库 输入 支持 最高 安全 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 服务器所有者必须更新 黄波信息网络安全管理 大学生网络安全论文结尾 广东新一代网络技术开发工艺 服务器ip登不上管理口 无锡视频分布式存储数据库 未来可能的网络安全 张湾区专业软件开发口碑推荐 传趣网络技术有限公司 云南好牛通网络技术有限公司 阳江自主可控软件开发优化价格 未来之役服务器怎么改回原来的 华为服务器的ibmc使用撒端口 北京质量软件开发设施参考价格 建国70周年网络安全检查 学校网络安全和宣传工作总结 杭州工业网络技术推荐咨询 大学网络数据库原理 小米软件开发 面试 485转以太网服务器 嵌入式软件开发专业课 文档数据库分 局域网服务器备份 大学生网络安全论文结尾 大学学生会网络技术部申请书 互联网硬科技有限公司招聘 东莞软件开发驻厂公司有哪些 intel上海软件开发大会 2021两会数据库 软件开发方案招投标
0