Spring Security的简单介绍

作者: 曲海峰 | 来源:发表于2017-11-11 21:38 被阅读0次

首先我们先对Spring Security进行简单的介绍:

Spring Security是专门针对基于Spring的项目的安全框架,充分利用了aop和依赖注入来实现安全的功能。安全框架有两个重要的概念,即认证和授权。认证即确认用户可以访问当前系统;授权即确定用户在当前系统下所拥有的功能权限。

Spring Security的配置

1)DelegatingFilterProxy

Spring Security为我们提供了一个或多个过滤器来实现所有安全的功能,我们只需注册一个特殊的DelegatingFilterProxy过滤器到WebApplicationInitializer即可。

而在实际应用中,我们只需要让自己的Initializer类继承AbstractSecurityWebApplicationInitializer抽象类即可。AbstractSecurityWebApplicationInitializer实现了WebApplicationInitializer接口,并通过onStartup方法调用。

insertSpringSecurityFilterChain(servletContext);

它为我们注册了DelegatingFilterProxy。insertSpringSecurityFilterChain源码如下:

配置

Spring Security的配置和Spring MVC的配置类似,只需在一个配置类上注解@EnableWebSecurity,并让这个类继承WebSecurityCOnfigurerAdapter即可。我们可以通过重写configure方法来配置相关的安全配置。

代码如下:

用户认证

认证需要我们有一套用户数据的来源,而授权则是对于某个用户有相应的角色权限。

在Spring Security里我们通过重写Protected void configure(AuthenticationManagerBuilder auth)方法来实现定制。

1)内存中的用户

使用AuthenticationManagerBuilder的inMemoryAuthentication方法即可添加在内存中的用户,并可给用户指定角色权限。

2)JDBC中的用户

JDBC中的用户直接指定dataSource即可。

不过这看上去很奇怪,其实这里的Spring Security是默认了你的数据库结构的。通过jdbcAuthentication的源码,我们可以看出JdbcDaoImpl中定义默认的用户及角色权限获取的SQL语句:

当然我们可以自定义我们的查询用户和权限的SQL语句,例如:

3)通用的用户

上面的两种用户和权限的获取方式只限于内存或者JDBC,我们的数据访问方式可以是多种多样的,可以是非关系型数据库,也可以是我们常用的JPA等。

这时我们需要自定义实现UserDetailsService接口。上面的内存中用户及JDBC用户就是UserDetailsService的实现,定义如下:

说明:SysUser是我们系统的用户领域对象类,User来自于org.springframework.Security.core.userdetails.User。除此之外,我们还需要注册这个CustomUserService,代码如下:

请求授权:

Spring Security是通过重写Protected void configure(HttpSecutity http)方法来实现请求拦截的。

Spring Security使用以下匹配器来匹配请求路径:

antMatchers:使用Ant风格的路径匹配

regexMatchers:使用正则表达式匹配路径

anyRequest:匹配所有请求路径

在匹配了请求路径后,需要针对当前用户的信息对请求路径进行安全处理,

Spring Security提供了表9-1所示的安全处理方法。

我们可以看一下下面的示例代码:

代码解释:

1)通过authorizeRequests方法来开始请求权限配置。

2)请求匹配/admin/**,只有拥有Role_ADMIN角色的用户可以访问。

3)请求匹配到/user/**,拥有ROLE_ADMIN或ROLE_USER角色的用户都可访问。

4)其余所有的请求都需要认证后(登陆后)才可访问。

定制登录行为

我们也可以通过重写

Protected void configure(httpSecurity http)

方法来定制我们的登录行为。

下面将重用的登录行为的定制以简短的代码演示:

代码解释:

1)通过formLogin方法定制登录操作。

2)使用loginPage方法定制登录页面的访问地址。

3)defaultSuccessUrl指定登录成功后转向的页面。

4)failureUrl指定登录失败后转向的页面。

5)rememberMe开启cookie存储用户信息。

6)tokenValiditySeconds指定cookie有效期为1209600秒,即2个星期

7)key指定cookie中的私钥。

8)使用logout方法定制注销行为。

9)logoutUrl指定注销的URL路径

10)logoutSuccessUrl指定注销成功后转向的页面

参考书籍:JavaEE开发的颠覆者 Spring Boot实战

下一篇讲解spring boot整合Spring Security

相关文章

网友评论

    本文标题:Spring Security的简单介绍

    本文链接:https://www.haomeiwen.com/subject/cfygmxtx.html