我们在编写Web应用时,经常需要对页面做一些安全控制,比如:对于没有访问权限的用户需要转到登录表单页面。要实现访问控制的方法多种多样,可以通过Aop、拦截器实现,也可以通过框架实现(如:Apache Shiro、Spring Security)。

本文将具体介绍在Spring Boot中如何使用Spring Security进行安全控制。

准备工作

首先,构建一个简单的Web工程,以用于后续添加安全控制,也可以用之前Chapter3-1-2做为基础工程。若对如何使用Spring Boot构建Web应用,可以先阅读《Spring Boot开发Web应用》一文。

Web层实现请求映射

  • /:映射到index.html
  • /hello:映射到hello.html

实现映射的页面

  • src/main/resources/templates/index.html
  • src/main/resources/templates/hello.html

可以看到在index.html中提供到/hello的链接,显然在这里没有任何安全控制,所以点击链接后就可以直接跳转到hello.html页面。

整合Spring Security

在这一节,我们将对/hello页面进行权限控制,必须是授权用户才能访问。当没有权限的用户访问后,跳转到登录页面。

添加依赖

在pom.xml中添加如下配置,引入对Spring Security的依赖。

Spring Security配置

创建Spring Security的配置类WebSecurityConfig,具体如下:

  • 通过@EnableWebSecurity注解开启Spring Security的功能
  • 继承WebSecurityConfigurerAdapter,并重写它的方法来设置一些web安全的细节
  • configure(HttpSecurity http)方法
  • 通过authorizeRequests()定义哪些URL需要被保护、哪些不需要被保护。例如以上代码指定了/和/home不需要任何认证就可以访问,其他的路径都必须通过身份验证。
  • 通过formLogin()定义当需要用户登录时候,转到的登录页面。
  • configureGlobal(AuthenticationManagerBuilder auth)方法,在内存中创建了一个用户,该用户的名称为user,密码为password,用户角色为USER。

新增登录请求与页面

在完成了Spring Security配置之后,我们还缺少登录的相关内容。

HelloController中新增/login请求映射至login.html

新增登录页面:src/main/resources/templates/login.html

可以看到,实现了一个简单的通过用户名和密码提交到/login的登录方式。

根据配置,Spring Security提供了一个过滤器来拦截请求并验证用户身份。如果用户身份认证失败,页面就重定向到/login?error,并且页面中会展现相应的错误信息。若用户想要注销登录,可以通过访问/login?logout请求,在完成注销之后,页面展现相应的成功消息。

到这里,我们启用应用,并访问http://localhost:8080/,可以正常访问。但是访问http://localhost:8080/hello的时候被重定向到了http://localhost:8080/login页面,因为没有登录,用户没有访问权限,通过输入用户名user和密码password进行登录后,跳转到了Hello World页面,再也通过访问http://localhost:8080/login?logout,就可以完成注销操作。

为了让整个过程更完成,我们可以修改hello.html,让它输出一些内容,并提供“注销”的链接。

本文通过一个最简单的示例完成了对Web应用的安全控制,Spring Security提供的功能还远不止于此,更多Spring Security的使用可参见Spring Security Reference。

springboot 访问html_Spring Boot中使用Spring Security进行安全控制相关推荐

  1. Spring Boot中使用Spring Security进行安全控制

    我们在编写Web应用时,经常需要对页面做一些安全控制,比如:对于没有访问权限的用户需要转到登录表单页面.要实现访问控制的方法多种多样,可以通过Aop.拦截器实现,也可以通过框架实现(如:Apache ...

  2. Spring boot中使用Spring Security的记住我 remember-me功能

    Spring boot中使用Spring Security的记住我 remember-me功能 问题描述:Spring security新手,在登录时加上记住我功能,需要使用框架自带的记住我. 记住的 ...

  3. Spring Security是什么,以及如何在Spring Boot项目中整合Spring Security并且使用它,下面我们通过一个登录案例简单介绍一下Spring Security。

    1.什么是Spring Security? 在了解Spring Security之前,我们是不是应该先思考一个问题,我们自己写的web案例一般都需要先登录,之后登录之后才能访问其他页面,或者说我们不同 ...

  4. Spring Boot实践 | 利用Spring Security快速搞定权限控制

    目录 开始之前 快速开始 使用内存签名服务 使用数据库签名服务 使用自定义签名服务 限制请求 强制使用HTTPS 防止跨站点伪造请求 用户认证功能 在java web工程中,一般使用Servlet过滤 ...

  5. Spring Boot 项目使用Spring Security防护CSRF攻击实战

    Spring Boot与Spring Security Spring Boot项目结合Spring Security ,可以实现用户认证和用户授权. Spring Security的用户认证可以是配置 ...

  6. 在 SpringBoot 项目中,Spring Security 和 Shiro 该如何选择?

    点击上方 好好学java ,选择 星标 公众号重磅资讯,干货,第一时间送达 今日推荐:推荐19个github超牛逼项目!个人原创100W +访问量博客:点击前往,查看更多 要知道Shiro和Sprin ...

  7. Spring Boot 2.3 中开启Spring Security

    Spring Security

  8. springboot 事务_Spring Boot中的事务是如何实现的?懂吗?

    一个SpringBoot问题就干趴下了?我却凭着这份PDF文档吊打面试官. 金三银四第一天,啃透这些SpringBoot知识点,还怕干不赢面试官? Spring全家桶笔记:Spring+Spring ...

  9. springboot 2.x升级后出现Spring Security – There is no PasswordEncoder mapped for the id “null”的解决方案

    异常描述: java.lang.IllegalArgumentException: There is no PasswordEncoder mapped for the id "null&q ...

最新文章

  1. 关于tail, head ,less ,more ,cat 之小介------Linux命令
  2. 显示计算机硬盘驱动器更改,笔记本硬盘驱动器的字母怎么修改?笔记本修改硬盘驱动器字母的方法...
  3. 调整屏幕亮度,调整字体大小
  4. 7805输入电流有要求吗_PLC输入输出接线全解析,值得收藏!
  5. spark 1.6.0 简单使用
  6. 【转】Jmeter + DadBoby 安装使用
  7. 同比暴增3700%!百度取代谷歌成世界第二
  8. 毕设项目,系统搭建笔记文档
  9. 近千人点赞!哈佛博士放出超多资源,机器学习课程教程小抄全都有
  10. Hadoop学习之路(一)理论基础和逻辑思维
  11. 赖特 因果分析_量子至上的赖特的东西
  12. 数据体系的四个层次:数据采集、数据计算、数据服务和数据应用
  13. 搜索不到投屏设备怎么办_电视投屏搜索不到设备解决方案
  14. (二)弹性布局Flex
  15. Zip、Rar文件解压
  16. docker容器启动后无法访问宿主机host
  17. 本Blog被http://www.dotnetnukeblogs.com/ 收录
  18. 经典0-1背包问题(C++解决代码优化版本)
  19. kubeadm修改默认证书有效期,解决证书过期问题
  20. vue2实现可拖拽甘特图(结合element-ui的gantt图)

热门文章

  1. FICO 最常用配置表
  2. 中国三大轴承厂是 哪三家?
  3. 销售订单抬头与行项目数据的关系
  4. 修改生产订单的BAPI!
  5. termux怎么安装python库_Python termux-apt-repo包_程序模块 - PyPI - Python中文网
  6. docker 添加端口映射_Docker容器修改端口映射
  7. 企业计算机能力,以IT企业需求为导向的计算机人才培养模式研究
  8. Python教程:跳出多层循环for、while
  9. Python教程:import 、from import 及from import *
  10. 11道Python最基本的面试题