Spring Security学习笔记
这篇文章是在学习Spring Security 4.1.3.RELEASE版本是做的学习笔记,相当于是一边看一边记录吧。以前使用过一段时间Spring Security,但是发现过一段时间之后,以前看的用的东西基本上全部还回去了,这次看这个吧就想着在这上面先把自己看的内容纪录一下吧,为自己后面使用做一个参考吧。
学习地址:http://docs.spring.io/spring-security/site/docs/4.1.3.RELEASE/reference/htmlsingle/#what-is-acegi-security
2.4 获取Spring Security
2.4.1 通过在Spring Security官网上面去下载自己需要的jar包,这里就不贴出具体的地址了,上Spring.io就可以找到的。
2.4.2 通过maven方式获取:这里还有一些快照版本以及其他的一些配置,这里不记录了。
<dependencies>
<!-- ... other dependency elements ... -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>4.1.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>4.1.3.RELEASE</version>
</dependency>
</dependencies>
2.4.3 通过grandle方式:
dependencies {
compile 'org.springframework.security:spring-security-web:4.1.3.RELEASE'
compile 'org.springframework.security:spring-security-config:4.1.3.RELEASE'
}
2.4.4 工程模块的讲解
在Spring Security3.0版本之后开始分离了很多个模块,这样我们可以通过自己的需要来添加需要的jar包,下面来讲解每个分割开的模块的具体用处吧。
- Core - spring-security-core.jar 这个jar包不多说了,要使用Spring Security就必须引入这个jar包,没商量。这个jar包可以应用在单独的应用中,远程客户端调用,Service调用以及数据库层的调用等等,包含下面的package:
org.springframework.security.core
org.springframework.security.access
org.springframework.security.authentication
org.springframework.security.provisioning
- Remoting - spring-security-remoting.jar 这个jar包在集成Spring Remote的时候要使用到,或者在有remote client情景的时候需要到这个jar包。
- Web - spring-security-web.jar 这个jar包在创建web应用的时候需要引入。
- Config - spring-security-config.jar 这个jar包是一个配置支持包,主要在使用Spring Security的配置(包含XML或者java configuration)时需要。
- LDAP - spring-security-ldap.jar 在需要使用LDAP认证的时候需要这个jar包。
- ACL - spring-security-acl.jar 在创建domain object实例的时候需要使用这个jar包。
- CAS - spring-security-cas.jar 这个jar的意思不是很明白,好像是说是使用单点登录的时候会用到这个jar包。
- OpenID - spring-security-openid.jar
- Test - spring-security-test.jar
到这里基本上所有的jar包都介绍完了,个人认为在一般简单的web应用中只需要将core,web,config这几个jar包引入基本上就可以使用简单的Spring Security了。
5 java configuration
<span style="font-size:18px;">import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.*;
import org.springframework.security.config.annotation.authentication.builders.*;
import org.springframework.security.config.annotation.web.configuration.*;
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth
.inMemoryAuthentication()
.withUser("user").password("password").roles("USER");
}
}</span>
值得注意的是:AuthenticationManagerBuilder类与@EnableWebSecurity。
- 认证应用中所有的url
- 自动产生一个登陆页面
- 可以通过“user”与"password"进行登陆
- 允许登出更能
- 阻止CSRF攻击
- session的保护
import org.springframework.security.web.context.*;
public class SecurityWebApplicationInitializer
extends AbstractSecurityWebApplicationInitializer {
public SecurityWebApplicationInitializer() {
super(WebSecurityConfig.class);
}
}
SecurityWebApplicationInitializer这个类主要完成对springSecurityFilterChain的注册以及使用classLoaderListener加载SecurityWebConfig类。
<span style="font-size:18px;">import org.springframework.security.web.context.*;
public class SecurityWebApplicationInitializer
extends AbstractSecurityWebApplicationInitializer {
}</span>
这里我们主要完成了对springSecurityFilterChain的注册,但是SecurityWebConfig并没有被加载。这里我们可以在WebApplicationInitializer中来加载SecurityWebConfig类的配置信息:
public class MvcWebApplicationInitializer extends
AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[] { WebSecurityConfig.class };
}
// ... other overrides ...
}
好了,这里基本上记录了如何通过java 文件来配置Spring Security。