文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Spring Boot如何集成Security实现安全认证

2024-12-02 11:26

关注

前面介绍了Spring Boot 使用JWT实现Token验证,其实Spring Boot 有完整的安全认证框架:Spring Security。接下来我们介绍如何集成Security 实现安全验证。

一、Security简介

安全对于企业来说至关重要,必要的安全认证为企业阻挡了外部非正常的访问,保证了企业内部数据的安全。

当前,数据安全问题越来越受到行业内公司的重视。数据泄漏很大一部分原因是非正常权限访问导致的,于是使用合适的安全框架保护企业服务的安全变得非常紧迫。在Java领域,Spring Security无疑是最佳选择之一。

Spring Security 是 Spring 家族中的一个安全管理框架,能够基于 Spring 的企业应用系统提供声明式的安全访问控制解决方案。它提供了一组可以在Spring应用系统中灵活配置的组件,充分利用了 Spring的IoC、DI和AOP等特性,为应用系统提供声明式的安全访问控制功能,减少了为企业系统安全控制编写大量重复代码的工作。

二、Spring Boot对Security的支持

虽然,在Spring Boot出现之前,Spring Security已经发展多年,但是使用并不广泛。安全管理这个领域一直是Shiro的天下,因为相对于Shiro,在项目中集成Spring Security还是一件麻烦的事情,所以Spring Security虽然比Shiro强大,但是却没有Shiro受欢迎。

随着Spring Boot的出现,Spring Boot 对Spring Security 提供了自动化配置方案,可以零配置使用 Spring Security。这使得Spring Security重新焕发新的活力。

Spring Boot 提供了集成 Spring Security 的组件包

spring-boot-starter-security,方便我们在 Spring Boot 项目中使用 Spring Security进行权限控制。

三、集成Security

在Spring Boot 项目中集成Spring Boot Security 非常简单,只需在项目中增加Spring Boot Security的依赖即可。下面通过示例演示Spring Boot中基础Security的登录验证。

1. 添加依赖

Spring Boot 提供了集成 Spring Security 的组件包

spring-boot-starter-security,方便我们在 Spring Boot 项目中使用 Spring Security。

  1.  
  2.     org.springframework.boot 
  3.     spring-boot-starter-web 
  4.  
  5.  
  6.     org.springframework.boot 
  7.     spring-boot-starter-thymeleaf 
  8.  
  9.  
  10.     org.springframework.boot 
  11.     spring-boot-starter-security 
  12.  

上面除了引入Security组件外,因为我们要做Web系统的权限验证,所以还添加了Web和Thymeleaf组件。

2. 配置登录用户名和密码

用户名和密码在application.properties中进行配置。

  1. # security 
  2. spring.security.user.name=admin 
  3. spring.security.user.password=admin 

在application.properties配置文件中增加了管理员的用户名和密码。

3. 添加Controller

创建SecurityController 类,在类中添加访问页面的入口。

  1. @Controller 
  2. public class SecurityController { 
  3.     @RequestMapping("/"
  4.     public String index() { 
  5.         return "index"
  6.     } 

4. 创建前端页面

在resources/templates 目录下创建页面 index.html,这个页面就是具体的需要增加权限控制的页面,只有登录了才能进入此页。

  1.  
  2. "http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org"
  3.  
  4.  
  5. 我是登录后才可以看的页面

     
  6.  
  7.  

我是登录后才可以看的页面 

5. 测试验证

配置完成后,重启项目,访问地址:http://localhost:8080/,页面会自动弹出一个登录框,如下图所示。 

 

系统自动跳转到Spring Security默认的登录页面,输入之前配置的用户名和密码就可以登录系统,登录后的页面如下图所示。 

 

通过上面的示例,我们看到Spring Security自动给所有访问请求做了登录保护,实现了页面权限控制。

四、登录验证

前面演示了在Spring Boot项目中集成Spring Security 实现简单的登录验证功能,在实际项目使用过程中,可能有的功能页面不需要进行登录验证,而有的功能页面只有进行登录验证才能访问。下面通过完整的示例程序演示如何实现Security的登录认证。

1. 创建页面content.html

先创建页面content.html,此页面只有登录用户才可查看,否则会跳转到登录页面,登录成功后才能访问。示例代码如下:

  1.  
  2. "http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org"
  3.  
  4.  
  5. 我是登录后才可以看的页面

     
  6. "post" action="/logout"
  7.     "submit">退出 
  8.  
  9.  
  10.  

在上面的示例中,我们看到退出使用post请求,因为Security退出请求默认只支持post 。

2. 修改index.html 页面

修改之前的index.html页面,增加登录按钮。

  1. 点击 "@{/content}">这里进入管理页面

     

在上面的示例中,index页面属于公共页面,无权限验证,从index页面进入content页面时需要登录验证。

3. 修改Controller控制器

修改之前的SecurityController控制器,增加content页面路由地址,示例代码如下:

  1. @RequestMapping("/"
  2. public String index() { 
  3.     return "index"
  4.   
  5. @RequestMapping("/content"
  6. public String content() { 
  7.     return "content"

4. 创建 SecurityConfig 类

创建 Security的配置文件SecurityConfig类,它继承于:

  1. @Configuration 
  2. @EnableWebSecurity 
  3. public class SecurityConfig extends WebSecurityConfigurerAdapter { 
  4.     @Override 
  5.     protected void configure(HttpSecurity http) throws Exception { 
  6.         http.authorizeRequests() 
  7.             .antMatchers("/""/home").permitAll() 
  8.             .anyRequest().authenticated() 
  9.             .and() 
  10.             .formLogin() 
  11.             .permitAll() 
  12.             .and() 
  13.             .logout() 
  14.             .permitAll() 
  15.             .and() 
  16.             .csrf() 
  17.             .ignoringAntMatchers("/logout"); 
  18.     } 

在上面的示例程序中,SecurityConfig类中配置 index.html 可以直接访问,但 content.html 需要登录后才可以查看,没有登录的自动跳转到登录页面。

5. 测试验证

修改完成之后重启项目,访问地址http://localhost:8080/可以看到 index 页面的内容,单击链接跳转到content页面时会自动跳转到登录页面,登录成功后才会自动跳转到

http://localhost:8080/content,在 content 页面单击“退出”按钮,会退出登录状态,跳转到登录页面并提示已经退出。 

 

登录、退出、请求受限页面退出后跳转到登录页面是常用的安全控制案例,也是账户系统基本的安全保障。

最后 

以上,我们就把Spring Boot如何集成Security实现安全认证介绍完了。

来源:今日头条内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯