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 ...
随机推荐
- Visual Studio跨平台开发(2):Xamarin.iOS基本控制项介绍
前言 在上一篇文章中, 我们介绍了Xamarin 以及简单的HelloWorld范例, 这次我们针对iOS的专案目录架构以及基本控制项进行说明. 包含UIButton,UISlider,UISwitc ...
- spring JPA写法一种
第一次用,搞了半天,终于知道了大概. 基于ORM的JPA还是蛮好用的, 这次是实现一个MANGODB的日志存储和检索. PRISM用的. repository的写法: package paic.sto ...
- 让指定JS出现智能提示
大家都知道,在Asp.net MVC中,引入了CSS,JS捆绑优化这个好东东.但是,你会发现,运用了这个捆绑优化后,或者引用了模板后,在模板中引用了JS的文件后,在页面中编辑JS文件后,却不能利索地出 ...
- HDU 2546.饭卡-动态规划0-1背包
饭卡 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submissi ...
- maven坐标
maven坐标 <dependency> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat ...
- Tomcat配置连接池
Tomcat配置DBCP连接池 配置tomcat服务器的时候,使用到jndi;通过Context配置文件实现配置池对象,通过new initialConext()对象的lookup()获取到数据池对象 ...
- java标识符与命名规则
标识符就是给变量.类或方法起的名字.可以用字母.下划线或美元符号开头,区分大小写,没有最大长度限制.(关键字除外) 关键字 访问控制 private protected public ...
- 新疆大学ACM-ICPC程序设计竞赛五月月赛(同步赛)- 猴子排序的期望
链接:https://www.nowcoder.com/acm/contest/116/F来源:牛客网 题目描述 我们知道有一种神奇的排序方法叫做猴子排序,就是把待排序的数字写在卡片上,然后让猴子把卡 ...
- sqlldr control file compare with HEX value
when field= UTL_I18N.RAW_TO_CHAR ('e38080', 'AL32UTF8')
- my-git-wiki-doing
github项目quick setup git初始化 git init git添加remote git remote add origin YOURS_REMOTE_URL git修改remote的u ...