【Spring Boot】用 Spring Security 实现后台登录及权限认证功能
创始人
2024-11-10 03:13:31
0

用 Spring Security 实现后台登录及权限认证功能

  • 1.引入依赖
  • 2.创建权限开放的页面
  • 3.创建需要权限验证的页面
  • 4.配置 Spring Security
    • 4.1 配置 Spring MVC
    • 4.2 配置 Spring Security
  • 5.创建登录页面
  • 6.测试权限

1.引入依赖

使用前需要引入相关依赖,见以下代码:

 	 		org.springframework.boot 		spring-boot-starter-web 	 	 	 		org.springframework.boot 		spring-boot-starter-security 	 	 	 		org.springframework.boot 		spring-boot-starter-thymeleaf 	 	 	 		org.thymeleaf.extras 		thymeleaf-extras-springsecurity5 	  

2.创建权限开放的页面

这个页面(welcome.html)是不需要鉴权即可访问的,以区别演示需要鉴权的页面,见以下代码:

  	Spring Security 案例 	 		

Welcome!

会员中心

3.创建需要权限验证的页面

其实可以和不需要鉴权的页面一样,鉴权可以不在 HTML 页面中进行,见以下代码:

  	home 	 		

会员中心

Hello

使用 Spring Security 5 之后,可以在模板中用 [[${#httpServletRequest.remoteUser}]] 来获取用户名。登岀请求将被发送到 /logout。成功注销后,会将用户重定向到 /login?logout

4.配置 Spring Security

4.1 配置 Spring MVC

可以继承 WebMvcConfigurer,具体使用见以下代码:

package com.example.demo.config;  import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;  @Configuration public class WebMvcConfig implements WebMvcConfigurer {     @Override     public void addViewControllers(ViewControllerRegistry registry) {         //设置登录处理操作         registry.addViewController("/home").setViewName("springsecurity/home");         registry.addViewController("/").setViewName("springsecurity/welcome");         registry.addViewController("/login").setViewName("springsecurity/login");     } } 

在这里插入图片描述

4.2 配置 Spring Security

Spring Security 的安全配置需要继承 WebSecurityConfigurerAdapter,然后重写其方法, 见以下代码:

package com.example.demo.config;  import org.springframework.beans.factory.annotation.Autowired; 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.EnableWebSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;  @Configuration // 指定为 Spring Security 配置类 @EnableWebSecurity public class WebSecurityConfig extends WebSecurityConfigurerAdapter {      @Override     protected void configure(HttpSecurity http) throws Exception {         http.authorizeRequests()                 .antMatchers("/", "/welcome", "/login").permitAll()                 .anyRequest().authenticated()                 .and()             .formLogin()             	.loginPage("/login").defaultSuccessUrl("/home")                 .and()             .logout().permitAll();     }       @Autowired     public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {         auth.inMemoryAuthentication().passwordEncoder(new BCryptPasswordEncoder())                 .withUser("admin").password("$2a$10$AlpMTGDkUfYJMnb3/uNT1.mLxLJng7Uplfzpv5yIqZTkYtYsiiYbO").roles("USER");     } } 
  • @EnableWebSecurity 注解:集成了 Spring Security 的 Web 安全支持。
  • @WebSecurityConfig:在配置类的同时集成了 WebSecurityConfigurerAdapter,重写了其中的特定方法,用于自定义 Spring Security 配置。Spring Security 的工作量都集中在该配置类。
  • configure(HttpSecurity):定义了哪些 URL 路径应该被拦截。
  • configureGlobaI(AuthenticationManagerBuiIder):在内存中配置一个用户,admin / pipi,这个用户拥有 User 角色。
  • 确保 antMatchers(xxx).permitAll() 的配置在需要认证和授权的 URL 路径之前。因为 Spring Security 会按照配置文件的顺序来匹配 URL 路径,如果 antMatchers(xxx).permitAll() 在后面,那么前面的认证和授权规则会覆盖掉它。
  • .logout().permitAll() 表示在 Spring Security 配置中,‌无论用户是否经过身份验证,‌都可以访问注销(‌logout)‌页面。‌这意味着,‌即使是一个未经过身份验证的用户也可以访问注销功能,‌这在某些情况下可能是一个安全隐患。‌因此,‌这个配置通常用于开发环境或测试环境,‌以确保用户可以轻松地测试注销功能,‌而在生产环境中,‌出于安全考虑,‌通常会更加限制对注销页面的访问权限。‌

5.创建登录页面

登录页面要特别注意是否开启了 CSRF 功能。如果开启了,则需要提交 token 信息。创建的登录页面见以下代码:

  	Spring Security Example  	 		
无效的用户名或者密码
你已经登出

6.测试权限

启动项目,访问首页 http://localhost:8080

在这里插入图片描述

单击 “会员中心”,尝试访问受限的页面 http://localhost:8080/home。由于未登录,结果被强制跳转到登录页面 http://localhost:8080/login

在这里插入图片描述

输入正确的用户名和密码 (admin, pipi) 之后,跳转到之前想要访问的 /home, 显示用户名 admin

在这里插入图片描述

单击 “登出” 按钮,回到登录页面。

在这里插入图片描述

相关内容

热门资讯

第二分钟科普!佛手十三道大菠萝... 较多好评“微乐万能挂官网”开挂(透视)辅助教程 了解更多开挂安装加(136704302)微信号是一款...
发现方式!玩吧辅助脚本,广西友... 广西友乐软件辅助开挂教程视频分享装挂详细步骤在当今的网络游戏中,广西友乐软件辅助作为一种经典的娱乐方...
第六分钟讲究!蘑菇云辅助使用视... 第六分钟讲究!蘑菇云辅助使用视频(辅助挂)果然是有挂的(AI教程开挂辅助工具)>>您好:软件加薇13...
分享窍门!微信小程序游戏破解器... 分享窍门!微信小程序游戏破解器,广西老友玩辅助,可靠教程(果然确实有挂)-哔哩哔哩;微信小程序游戏破...
八分钟明白!四川熊猫辅助软件下... 大家好,今天小编来为大家解答四川熊猫辅助软件下载这个问题咨询软件客服可以免费测试直接加微信(1367...
通报方式!微乐家乡自建房辅助a... 通报方式!微乐家乡自建房辅助app,宝宝游戏辅助,安装教程(一直确实有挂)-哔哩哔哩;无需打开直接搜...
八分钟透视!全民内蒙古辅助(辅... 您好:这款全民内蒙古辅助游戏是可以开挂的,确实是有挂的,很多玩家在这款全民内蒙古辅助游戏中打牌都会发...
关于操作!约局吧可以看到别人底... 约局吧可以看到别人底牌是一款专注玩家量身打造的游戏记牌类型软件,在约局吧可以看到别人底牌这款游戏中我...
4分钟了解!hhpoker免费... 4分钟了解!hhpoker免费辅助器(辅助挂)果然真的是有挂(教你教程开挂辅助工具)《详细加薇136...
发现攻略!开心茶苑13道辅助,... 发现攻略!开心茶苑13道辅助,胡乐辅助脚本,安装教程(其实是有挂)-哔哩哔哩您好:开心茶苑13道辅助...