SpringSecurity---javaconfig:Hello Web Security
© 版权声明:本文为博主原创文章,转载请注明出处
本文根据官方文档加上自己的理解,仅供参考
介绍:

第一步是创建Spring Security的java配置。这个配置创建了一个Servlet过滤器被称为springSecurityFilterChain,它负责你的应用中所有的安全问题(保护应用程序的url,验证提交的用户名和密码,重定向到登录表单等等)。
你可以在下面找到Spring Security Java 配置最基础的例子:


这个配置并没有太多东西,但是做了很多。你可以找到下面的特征摘要
- 需要验证您的应用程序中每个URL
- 为您生成一个登录表单
- 允许用户用username的用户名和password的密码进行基于表单的身份验证
- 允许用户注销
- 预防CSRF攻击
- Session Fixation保护
- 安全头集成
- 为了保护请求采用HTTP强制安全传输技术
- X-Content-Type-Options集成
- 缓存控制(可以由应用程序稍后重写,允许缓存静态资源)
- X-XSS-Protection集成
- X-Frame-Options集成去防止“点击劫持”
- 与下面的Servlet API方法集成
- HttpServletRequest#getRemoteUser()
- HttpServletRequest.html#getUserPrincipal()
- HttpServletRequest.html#isUserInRole(java.lang.String)
- HttpServletRequest.html#login(java.lang.String, java.lang.String)
- HttpServletRequest.html#logout()

下一步是注册springSecurityFilterChain到war中。在一个Servlet 3 +环境,可以使spring的webapplicationinitializer支持java的配置。毫无疑问的是,Spring Security提供一个基类AbstractSecurityWebApplicationInitializer
确保springSecurityFilterChain被注册,我们使用AbstractSecurityWebApplicationInitializer的方式是取决于我们已经使用了Spring还是Spring Security是我们应用中唯一的Spring组件
- 章节5.1.2,“AbstractSecurityWebApplicationInitializer不存在Spring” - 如果你没有使用Spring用这个说明
- 章节5.1.3,“AbstractSecurityWebApplicationInitializer存在Spring MVC” - 如果你已经使用Spring用这个说明

如果你没有使用Spring或Spring MVC,你将需要通过在WebSecurityConfig到父类确保配置被使用。你可以在下面找到一个例子:


这个SecurityWebApplicationInitializer将做到下面这些事情:
- 自动为你的应用中的每个URL注册springSecurityFilterChain过滤器
- 添加ContextLoaderListener加载WebSecurityConfig

如果我们已经在应用的其他地方使用了Spring,那么可能已经有了一个WebApplicationInitializer去加载我们的Spring配置。如果我们使用之前的配置可能会得到一个错误。相反,我们应该注册
Spring Security到已经存在的ApplicationContext。例如,如果我们使用Spring MVC我们的SecurityWebApplicationInitializer可能会像下面这样:


它很简单的为我们应用中的每个URL注册了springSecurityFilterChain过滤器,之后我们将确保WebSecurityConfig将被加载到已存在的ApplicationInitializer。例如:如果我们使用Spring MVC,
它将被添加在getRootConfigClasses()方法中

实例:
项目结构:

pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.springsecurity</groupId>
<artifactId>WebSecurity</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version> <dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-framework-bom</artifactId>
<version>5.0.4.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement> <dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>5.0.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>5.0.3.RELEASE</version>
</dependency>
</dependencies> <build> <finalName>WebSecurity</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
pom.xml
WebSecurityConfig.java
package org.springsecurity.config; import org.springframework.context.annotation.Bean;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.provisioning.InMemoryUserDetailsManager; @EnableWebSecurity
public class WebSecurityConfig { @Bean
@SuppressWarnings("deprecation")
public UserDetailsService userDetailsService() {
InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();
manager.createUser(User.withDefaultPasswordEncoder()
.username("username").password("password").roles("USER").build());
return manager;
} }
WebSecurityConfig.java
SecurityWebApplicationInitializer.java
package org.springsecurity.config;
import org.springframework.security.web.context.AbstractSecurityWebApplicationInitializer;
public class SecurityWebApplicationInitializer extends AbstractSecurityWebApplicationInitializer {
public SecurityWebApplicationInitializer() {
super(WebSecurityConfig.class);
}
}
SecurityWebApplicationInitializer.java
项目预览

说明
- 该项目只有两个java文件
- pom.xml中引入的依赖,也可以在官方文档中找到。地址:https://docs.spring.io/spring-security/site/docs/5.0.3.RELEASE/reference/htmlsingle/#maven
- 但是自动生成了登录界面,并可用WebSecurityConfig.java中配置的用户名username和密码password进行登录
- 登录完成后自动跳转到index.jsp,该页面是创建web项目时自动生成的
SpringSecurity---javaconfig:Hello Web Security的更多相关文章
- ref:web security最新学习资料收集
ref:https://chybeta.github.io/2017/08/19/Web-Security-Learning/ ref:https://github.com/CHYbeta/Web-S ...
- SPRING SECURITY JAVA配置:Web Security
在前一篇,我已经介绍了Spring Security Java配置,也概括的介绍了一下这个项目方方面面.在这篇文章中,我们来看一看一个简单的基于web security配置的例子.之后我们再来作更多的 ...
- Portswigger web security academy:WebSockets
Portswigger web security academy:WebSockets 目录 Portswigger web security academy:WebSockets Lab: Mani ...
- Portswigger web security academy:Clickjacking (UI redressing)
Portswigger web security academy:Clickjacking (UI redressing) 目录 Portswigger web security academy:Cl ...
- Portswigger web security academy:Cross-origin resource sharing (CORS)
Portswigger web security academy:Cross-origin resource sharing (CORS) 目录 Portswigger web security ac ...
- Portswigger web security academy:XML external entity (XXE) injection
Portswigger web security academy:XML external entity (XXE) injection 目录 Portswigger web security aca ...
- Portswigger web security academy:Cross-site request forgery (CSRF)
Portswigger web security academy:Cross-site request forgery (CSRF) 目录 Portswigger web security acade ...
- Portswigger web security academy:OAth authentication vulnerable
Portswigger web security academy:OAth authentication vulnerable 目录 Portswigger web security academy: ...
- Portswigger web security academy:Server-side request forgery (SSRF)
Portswigger web security academy:Server-side request forgery (SSRF) 目录 Portswigger web security acad ...
随机推荐
- 在Ubuntu/Centos使用 Let's Encrypt 证书部署 HTTPS的方法
certbot地址 apache服务器(ubuntu环境): 1.获取软件包: $ sudo apt-get update $ sudo apt-get install software-proper ...
- [BZOJ1051][HAOI2006] 受欢迎的牛 tarjan求联通分量
1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 5687 Solved: 3016[Submit][Sta ...
- AC日记——Little Elephant and Function codeforces 221a
A - Little Elephant and Function 思路: 水题: 代码: #include <cstdio> #include <iostream> using ...
- maven工程开始
clipse中,maven工程,更新pom.xml文件后,会让你更新工程.快捷键是Alt + F5,也可以右键工程,Maven-->update project...,这样有个问题就是默认的JR ...
- 小白到web前端工程师需要学习哪些知识?
随着web3.0时代,那么web前端开发技术人才越来越吃香,而且web前端领域划分越来越细,对技术的需求越来越高,想学习web前端的人也是越来越多.那么,如何学习web前端知识?从哪开始?转型成为we ...
- poj3254(状态压缩DP)
poj3254 题意 给出一个01矩阵,1表示当前这个位置可以放牛,要求放牛的方案保证牛不能左右或上下相邻,求方案数. 分析 dp[S][i]: 表示到 i 行时的状态S(用二进制数表示),那么状态转 ...
- oracle Update a table with data from another table
UPDATE table1 t1 SET (name, desc) = (SELECT t2.name, t2.desc FROM table2 t2 WHERE t1.id = t2.id) WHE ...
- 解魔方的机器人攻略15 – 安装 Eclipse
由 动力老男孩 发表于 2009/12/27 17:40:49 在远古时代,程序员们通常用写字板来编写Java程序,然后用Javac.exe和Java.exe来编译和执行.对于NXT来说,对应的命令是 ...
- 【JPA】JPA的注解@MappedSuperclass作用解释【转】
[代码参考地址]:GitHub地址 [原文地址][http://blog.sina.com.cn/s/blog_7085382f0100uk4p.html] [这里仅用到第三点为止] ======== ...
- 基本数据类型,包装类型,String类型数据之间的转换
java中所有的类都从java.lang.Object类派生而来,在java语言中,除基本数据类型以外,基本数据类型有java类库体统了包装类:Integer类保存整形变量,Boolean类保存布尔变 ...