《Spring Security教程系列》二.初识Java 配置

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014453515/article/details/53406484

Java配置使用and()方法相当于XML标签的关闭,这样允许我们继续配置父类节点。如果你阅读代码他很合理,我想配置请求验证,并使用表单和HTTP基本身份验证进行登录。

Java配置和表单登录

因此使用Java代码配置Spring Security主要是这两个步骤:

1、创建过滤器

2、注册过滤器。

1.第一步创建过滤器

这段配置创建一个Servlet Filter:springSecurityFilterChain,其负责应用中的所有安全,包括:保护应用的URLS,验证提交的username和password,重定向到登录页面等。通过以下代码可以看到使用Java配置Spring Security的基础案例:


@EnableWebSecurity

public class SecurityConfig extends WebSecurityConfigurerAdapter{

@Autowired

public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {

auth

.inMemoryAuthentication()

.withUser("user").password("password").roles("USER");

}

}

方法名 configureGlobal是无关紧要的,重要的是在一个添加了 @EnableWebSecurity注解的类里面,注入 AuthenticationManagerBuilder。这段代码内容很少,但事实上已经做了很多的默认安全验证,包括:

1、访问应用中的每个URL都需要进行验证

2、生成一个登陆表单

3、允许用户使用username和password来登陆

4、允许用户注销

5、CSRF攻击拦截

6、 Session Fixation攻击

7、 安全Header集成

1. 1@EnableWebSecurity

当我们在任意一个类上添加了一个注解@EnableWebSecurity,就可以创建一个名为 springSecurityFilterChain 的Filter。我们是在一个自定义的SecurityConfig类上加了这个注解。SecurityConfig类同时也继承了WebSecurityConfigurerAdapter类,不过需要注意的是,这个过滤器的创建是通过@EnableWebSecurity完成的,与是否继承这个类无关.

实现EnableWebSecurity的源码中加上了@Configuration、@EnableGlobalAuthentication、@Import三个注解,所以使用@EnableWebSecurity就相当于同时加上了这三个注解。

总结: @EnableWebSecurity的作用实际上是,创建一个Spring Bean,Bean的类型是Filter,名字为springSecurityFilterChain。只要我们保证自定义的SecuirtyConfig类,可以被Spring扫描到,就可以帮助我们创建这个Filter了。

1.2 springSecurityFilterChain 过滤器的类型是什么

Filter的创建时通过WebSecurity对象的build方法完成的,WebSecurity由WebSecurityConfiguration创建,而WebSecurity的作用是用于创建一个类型为FilterChainProxy的过滤器,FilterChainProxy是Filter的子类,我们所说的创建一个名字为springSecurityFilterChain的过滤器,实际上过滤器的具体类型就是FilterChainProxy

2.注册过滤器

下一步是注册springSecurityFilterChain。这个可以借助Spring3.1引入的WebApplicationInitializer完成。SpringSecurity提供了一个基类 AbstractSecurityWebApplicationInitializer来确保 springSecurityFilterChain被注册。

项目中已经使用了SpringMvc

如果在我们的应用程序中已经使用了Spring,那么在我们的应用中可能已经有了一个 WebApplicationInitializer来加载我们的配置,如果我们还使用之前的代码,将会出现一个错误。此时我们应该在已经存在的ApplicationContext中注册Spring Security。例如,如果我们已经使用SpringMvc,那么我们的代码应该是如下所示:


import org.springframework.security.web.context.*;

public class SecurityWebApplicationInitializer

        extends AbstractSecurityWebApplicationInitializer {



}

猜你喜欢

转载自blog.csdn.net/u014453515/article/details/53406484