当前位置: 首页 > news >正文

Spring Security(笔记)

第一步:

首先使用Intellij IDEA创建一个Spring Boot项目,JDK选择自己安装的1.8。点击Next后,编辑项目信息。然后跳转到选择依赖页面。 

第二步:

添加Spring Security、Spring Web、Thymeleaf三个依赖。完成后等待项目构建完成。

Spring Web项目包含了Web项目常用的依赖:

  1. 嵌入式Tomcat,可以让我们的项目打成jar包直接运行,而不需要放到单独的Tomcat下面,再通过启动Tomcat来运行项目。

  2. Spring MVC,服务端三层架构中的视图层框架。主要用于处理页面跳转、页面请求处理等逻辑。

  3. Jackson,可以把数据转换成JSON格式,也可以把JSON格式的数据解析成对象。

Thymeleaf是一个类似于JSP页面的模板引擎,可以把静态的HTML页面变成动态变化的HTML页面。使用简单方便,性能更高,Spring官方非常推荐。

 

第三步:

项目构建完成后,在pom.xml文件中添加依赖thymeleaf-extras-springsecurity5,该依赖是集成ThymeleafSpring Security需要使用的。

<dependency><groupId>org.thymeleaf.extras</groupId><artifactId>thymeleaf-extras-springsecurity5</artifactId><version>3.0.3.RELEASE</version>
</dependency>

第四步:

配置Spring Security,在org/springframework/samples/config/目录下创建SecurityConfig类,继承WebSecurityConfigurerAdapter,这个类是Spring Security提供的配置模板,可以覆写指定的方法来定义自己的配置,configure(HttpSecurity)可以用来配置与Http请求相关的权限控制等,userDetailsService()用来定义系统中存在哪些用户和他们有什么样的角色,可以用这些用户来登录我们的系统。在这里,我定义了一个用户名为user,密码为password的用户。

// 开启Spring Security,有了这个注解,Spring就会帮助我们自动配置Spring Security。
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {@Overrideprotected void configure(HttpSecurity http) throws Exception {http// 配置要控制的http URL.authorizeRequests()// 对于静态文件和页面不拦截。.antMatchers("/css/**", "/index").permitAll()// /user/下的请求只有拥有USER角色的用户才能访问.antMatchers("/user/**").hasRole("USER")// 回到HttpSecurity.and()// 设置通过表单进行登录认证.formLogin()// 登录页名称(即login.html),登录页不需要权限控制.loginPage("/login")// 登录校验地址,点击登录按钮时会跳转到该地址.loginProcessingUrl("/loginUrl")// 登录错误页地址.failureUrl("login-error");}@Override@Beanpublic UserDetailsService userDetailsService() {UserDetails userDetails = User.withDefaultPasswordEncoder()// 用户名.username("user")// 密码.password("password")// 拥有的角色.roles("USER").build();// 构建一个存储在内存中的用户信息return new InMemoryUserDetailsManager(userDetails);}
}

antMatchers()是一个采用ANT模式的URL匹配器,*可以匹配0或者多个目录或者字符。`/css/*表示匹配/css`目录下的所有内容。

相关文章:

  • OPCUA,OPCDA与MODBUS学习笔记
  • P2392 kkksc03考前临时抱佛脚
  • 【C++ Qt】多元素控件(ListWidget、TableWidget、TreeWidget)
  • PPT画图导出为PDF格式
  • 15 个 Azure DevOps 场景化面试问题及解答
  • ubuntu24.04安装cuda
  • 【工具教程】批量提取PDF指定内容并重命名,PDF文档根据指定识别文字改名,基于java的实现方案
  • 万物互联时代:ONVIF协议如何重构安防监控系统架构
  • 在现代Web应用中集成 PDF.js (pdfjs-dist 5.2 ESM): 通过 jsdelivr 实现动态加载与批注功能的思考
  • kotlin @JvmStatic注解的作用和使用场景
  • 趣味编程:爱心
  • QMK开发环境搭建指南:Eclipse和VS Code详解
  • VGGNet详解
  • 裸辞8年前端的面试笔记——JavaScript篇(一)
  • 深入理解 Docker 网络原理:构建高效、灵活的容器网络
  • 在Lua中使用轻量级userdata在C/C++之间传递数据和调用函数
  • MySQL中MVCC的实现原理
  • 【MySQL】存储引擎 - InnoDB详解
  • 区块链内容创作全攻略:海报、白皮书与视频的视觉化革命
  • commonmark.js 源码阅读(一) - Block Parser
  • 本周看啥|喜欢二次元的观众,去电影院吧
  • 看展览|2025影像上海艺博会:市场与当代媒介中的摄影
  • 上海:企业招用高校毕业生可享受1500元/人一次性扩岗补助
  • 壹基金发布2024年度报告,公益项目惠及937万人次
  • 新疆维吾尔自治区乌鲁木齐市米东区政协原副主席朱文智被查
  • 东洋学人|滨田青陵:近代日本考古学第一人