- 浏览: 292701 次
- 性别:
- 来自: 唐山
最新评论
-
小灯笼:
JBPM5.4实战流程引擎开发网盘地址:https://pan ...
跟我学工作流——jBPM4视频教程(免费) -
Kai_Ge:
<div class="quote_title ...
Spring Security-3.0.1中文官方文档(翻译版) -
漂泊一剑客:
博主,你自己电脑上有下载,这些信息吗,能否分享一下给我
跟我学工作流——jBPM4视频教程(免费) -
Rookie_Li:
您好,您的教程很有用,请问例子的源码在哪下载?
spring security权限管理手册升级至spring security-3.1.3 -
nullFFF:
马教授 写道现在还用4有点过时了,最新的都已经是5.4了,目前 ...
跟我学工作流——jBPM4视频教程(免费)
这次发布的Spring Security-3.0.1是一个bug fix版,主要是对3.0中存在的一些问题进行修正。文档中没有添加新功能的介绍,但是将之前拼写错误的一些类名进行了修正,建议开发者以这一版本的文档为参考。
另:Spring
Security从2010-01-01以后,版本控制从SVN换成了GIT,我们在翻译文档的时候,主要是根据SVN的变化来进行文档内容的比对,这次
换成GIT后,感觉缺少了之前那种文本比对工具,如果有对GIT熟悉的朋友,还请推荐一下文本比对的工具,谢谢。
spring-security-core.jar
spring-security-web.jar
spring-security-config.jar
spring-security-ldap.jar
spring-security-acl.jar
spring-security-cas-client.jar
spring-security-openid.jar
web.xml
<http>
配置
auto-config
包含了什么?
AuthenticationEntryPoint
<global-method-security>
元素
protect-pointcut
添加安全切点
SecurityContext
。
AbstractSecurityInterceptor
AuthenticationManager
, ProviderManager
和 AuthenticationProvider
s
DaoAuthenticationProvider
UserDetailsService
实现
JdbcDaoImpl
DelegatingFilterProxy
FilterChainProxy
FilterSecurityInterceptor
ExceptionTranslationFilter
AuthenticationEntryPoint
AccessDeniedHandler
SecurityContextPersistenceFilter
SecurityContextRepository
UsernamePasswordAuthenticationFilter
BasicAuthenticationFilter
DigestAuthenticationFilter
SessionAuthenticationStrategy
AuthenticationTrustResolver
RoleVoter
AuthenticatedVoter
@Pre
和 @Post
注解
@PreAuthorize
和 @PostAuthorize
@PreFilter
和 @PostFilter
FilterBasedLdapUserSearch
authorize
标签
authentication
标签
accesscontrollist
标签
<http>
元素
<http>
属性
servlet-api-provision
path-type
lowercase-comparisons
realm
entry-point-ref
access-decision-manager-ref
access-denied-page
once-per-request
create-session
<access-denied-handler>
<intercept-url>
元素
pattern
method
access
requires-channel
filters
<port-mappings>
元素
<form-login>
元素
login-page
login-processing-url
default-target-url
always-use-default-target
authentication-failure-url
authentication-success-handler-ref
authentication-failure-handler-ref
<http-basic>
元素
<remember-me>
元素
data-source-ref
token-repository-ref
services-ref
token-repository-ref
key
属性
token-validity-seconds
user-service-ref
<session-management>
元素
session-fixation-protection
<concurrent-control>
元素
max-sessions
属性
expired-url
属性
error-if-maximum-exceeded
属性
session-registry-alias
和session-registry-ref
属性
<anonymous>
元素
<x509>
元素
subject-principal-regex
属性
user-service-ref
属性
<openid-login>
元素
<logout>
元素
logout-url
属性
logout-success-url
属性
invalidate-session
属性
<custom-filter>
元素
<authentication-manager>
元素
<authentication-provider>
来引用一个 AuthenticationProvider
Bean
<global-method-security>
元素
secured-annotations
和jsr250-annotations
属性
<protect-pointcut>
<after-invocation-provider>
元素
<ldap-server>
元素定义LDAP服务器
<ldap-provider>
元素
<ldap-user-service>
元素
评论
25 楼
Kai_Ge
2015-07-07
学会做人 写道
临远大哥,谢谢你的贡献
大名鼎鼎的临远!!膜拜中。
24 楼
wangchaoyong
2010-12-29
正在学生中,可有下载地址??
23 楼
yerui627
2010-08-30
辛苦了,翻译不错
22 楼
demojava
2010-08-27
楼主好人啊,辛苦了
21 楼
zrhcslgxy
2010-06-10
有没有下载的chm或者其他可以在本地看的文件样式?
20 楼
imshare
2010-06-10
只过用Spring Security2 ,3的版本还没有用过,近端时间有打算升级
19 楼
jake.hao
2010-06-10
支持一下!
18 楼
学会做人
2010-05-30
临远大哥,谢谢你的贡献
17 楼
huangbq
2010-05-19
楼主更新的真快呀!也希望楼主能提供pdf或者chm版的!
16 楼
dengquanhao
2010-04-08
http://www.family168.com/oa/springsecurity/html/index.html
在上面的网址中,是基于2.0的教程,其中有关于“使用数据库管理资源”的章节。请问在3.0的条件下,是如何实现的啊。(包括配置文件)谢谢。参考代码如下:
package com.family168.springsecuritybook.ch005;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import javax.sql.DataSource;
import org.springframework.beans.factory.FactoryBean;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
import org.springframework.jdbc.object.MappingSqlQuery;
import org.springframework.security.ConfigAttributeDefinition;
import org.springframework.security.ConfigAttributeEditor;
import org.springframework.security.intercept.web.DefaultFilterInvocationDefinitionSource;
import org.springframework.security.intercept.web.FilterInvocationDefinitionSource;
import org.springframework.security.intercept.web.RequestKey;
import org.springframework.security.util.AntUrlPathMatcher;
import org.springframework.security.util.UrlMatcher;
public class JdbcFilterInvocationDefinitionSourceFactoryBean
extends JdbcDaoSupport implements FactoryBean {
private String resourceQuery;
public boolean isSingleton() {
return true;
}
public Class getObjectType() {
return FilterInvocationDefinitionSource.class;
}
public Object getObject() {
return new DefaultFilterInvocationDefinitionSource(this
.getUrlMatcher(), this.buildRequestMap());
}
protected Map<String, String> findResources() {
ResourceMapping resourceMapping = new ResourceMapping(getDataSource(),
resourceQuery);
Map<String, String> resourceMap = new LinkedHashMap<String, String>();
for (Resource resource : (List<Resource>) resourceMapping.execute()) {
String url = resource.getUrl();
String role = resource.getRole();
if (resourceMap.containsKey(url)) {
String value = resourceMap.get(url);
resourceMap.put(url, value + "," + role);
} else {
resourceMap.put(url, role);
}
}
return resourceMap;
}
protected LinkedHashMap<RequestKey, ConfigAttributeDefinition> buildRequestMap() {
LinkedHashMap<RequestKey, ConfigAttributeDefinition> requestMap = null;
requestMap = new LinkedHashMap<RequestKey, ConfigAttributeDefinition>();
ConfigAttributeEditor editor = new ConfigAttributeEditor();
Map<String, String> resourceMap = this.findResources();
for (Map.Entry<String, String> entry : resourceMap.entrySet()) {
RequestKey key = new RequestKey(entry.getKey(), null);
editor.setAsText(entry.getValue());
requestMap.put(key,
(ConfigAttributeDefinition) editor.getValue());
}
return requestMap;
}
protected UrlMatcher getUrlMatcher() {
return new AntUrlPathMatcher();
}
public void setResourceQuery(String resourceQuery) {
this.resourceQuery = resourceQuery;
}
private class Resource {
private String url;
private String role;
public Resource(String url, String role) {
this.url = url;
this.role = role;
}
public String getUrl() {
return url;
}
public String getRole() {
return role;
}
}
private class ResourceMapping extends MappingSqlQuery {
protected ResourceMapping(DataSource dataSource,
String resourceQuery) {
super(dataSource, resourceQuery);
compile();
}
protected Object mapRow(ResultSet rs, int rownum)
throws SQLException {
String url = rs.getString(1);
String role = rs.getString(2);
Resource resource = new Resource(url, role);
return resource;
}
}
}
配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-2.0.4.xsd">
<http auto-config="true"/>
<authentication-provider>
<jdbc-user-service data-source-ref="dataSource"
users-by-username-query="select username,password,status as enabled
from user
where username=?"
authorities-by-username-query="select u.username,r.name as authority
from user u
join user_role ur
on u.id=ur.user_id
join role r
on r.id=ur.role_id
where u.username=?"/>
</authentication-provider>
<beans:bean id="filterSecurityInterceptor"
class="org.springframework.security.intercept.web.FilterSecurityInterceptor" autowire="byType">
<custom-filter before="FILTER_SECURITY_INTERCEPTOR" />
<beans:property name="objectDefinitionSource" ref="filterInvocationDefinitionSource" />
</beans:bean>
<beans:bean id="filterInvocationDefinitionSource"
class="com.family168.springsecuritybook.ch05.JdbcFilterInvocationDefinitionSourceFactoryBean">
<beans:property name="dataSource" ref="dataSource"/>
<beans:property name="resourceQuery" value="
select re.res_string,r.name
from role r
join resc_role rr
on r.id=rr.role_id
join resc re
on re.id=rr.resc_id
order by re.priority
"/>
</beans:bean>
<beans:bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<beans:property name="driverClassName" value="org.hsqldb.jdbcDriver"/>
<beans:property name="url" value="jdbc:hsqldb:res:/hsqldb/test"/>
<beans:property name="username" value="sa"/>
<beans:property name="password" value=""/>
</beans:bean>
</beans:beans>
在上面的网址中,是基于2.0的教程,其中有关于“使用数据库管理资源”的章节。请问在3.0的条件下,是如何实现的啊。(包括配置文件)谢谢。参考代码如下:
package com.family168.springsecuritybook.ch005;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import javax.sql.DataSource;
import org.springframework.beans.factory.FactoryBean;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
import org.springframework.jdbc.object.MappingSqlQuery;
import org.springframework.security.ConfigAttributeDefinition;
import org.springframework.security.ConfigAttributeEditor;
import org.springframework.security.intercept.web.DefaultFilterInvocationDefinitionSource;
import org.springframework.security.intercept.web.FilterInvocationDefinitionSource;
import org.springframework.security.intercept.web.RequestKey;
import org.springframework.security.util.AntUrlPathMatcher;
import org.springframework.security.util.UrlMatcher;
public class JdbcFilterInvocationDefinitionSourceFactoryBean
extends JdbcDaoSupport implements FactoryBean {
private String resourceQuery;
public boolean isSingleton() {
return true;
}
public Class getObjectType() {
return FilterInvocationDefinitionSource.class;
}
public Object getObject() {
return new DefaultFilterInvocationDefinitionSource(this
.getUrlMatcher(), this.buildRequestMap());
}
protected Map<String, String> findResources() {
ResourceMapping resourceMapping = new ResourceMapping(getDataSource(),
resourceQuery);
Map<String, String> resourceMap = new LinkedHashMap<String, String>();
for (Resource resource : (List<Resource>) resourceMapping.execute()) {
String url = resource.getUrl();
String role = resource.getRole();
if (resourceMap.containsKey(url)) {
String value = resourceMap.get(url);
resourceMap.put(url, value + "," + role);
} else {
resourceMap.put(url, role);
}
}
return resourceMap;
}
protected LinkedHashMap<RequestKey, ConfigAttributeDefinition> buildRequestMap() {
LinkedHashMap<RequestKey, ConfigAttributeDefinition> requestMap = null;
requestMap = new LinkedHashMap<RequestKey, ConfigAttributeDefinition>();
ConfigAttributeEditor editor = new ConfigAttributeEditor();
Map<String, String> resourceMap = this.findResources();
for (Map.Entry<String, String> entry : resourceMap.entrySet()) {
RequestKey key = new RequestKey(entry.getKey(), null);
editor.setAsText(entry.getValue());
requestMap.put(key,
(ConfigAttributeDefinition) editor.getValue());
}
return requestMap;
}
protected UrlMatcher getUrlMatcher() {
return new AntUrlPathMatcher();
}
public void setResourceQuery(String resourceQuery) {
this.resourceQuery = resourceQuery;
}
private class Resource {
private String url;
private String role;
public Resource(String url, String role) {
this.url = url;
this.role = role;
}
public String getUrl() {
return url;
}
public String getRole() {
return role;
}
}
private class ResourceMapping extends MappingSqlQuery {
protected ResourceMapping(DataSource dataSource,
String resourceQuery) {
super(dataSource, resourceQuery);
compile();
}
protected Object mapRow(ResultSet rs, int rownum)
throws SQLException {
String url = rs.getString(1);
String role = rs.getString(2);
Resource resource = new Resource(url, role);
return resource;
}
}
}
配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-2.0.4.xsd">
<http auto-config="true"/>
<authentication-provider>
<jdbc-user-service data-source-ref="dataSource"
users-by-username-query="select username,password,status as enabled
from user
where username=?"
authorities-by-username-query="select u.username,r.name as authority
from user u
join user_role ur
on u.id=ur.user_id
join role r
on r.id=ur.role_id
where u.username=?"/>
</authentication-provider>
<beans:bean id="filterSecurityInterceptor"
class="org.springframework.security.intercept.web.FilterSecurityInterceptor" autowire="byType">
<custom-filter before="FILTER_SECURITY_INTERCEPTOR" />
<beans:property name="objectDefinitionSource" ref="filterInvocationDefinitionSource" />
</beans:bean>
<beans:bean id="filterInvocationDefinitionSource"
class="com.family168.springsecuritybook.ch05.JdbcFilterInvocationDefinitionSourceFactoryBean">
<beans:property name="dataSource" ref="dataSource"/>
<beans:property name="resourceQuery" value="
select re.res_string,r.name
from role r
join resc_role rr
on r.id=rr.role_id
join resc re
on re.id=rr.resc_id
order by re.priority
"/>
</beans:bean>
<beans:bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<beans:property name="driverClassName" value="org.hsqldb.jdbcDriver"/>
<beans:property name="url" value="jdbc:hsqldb:res:/hsqldb/test"/>
<beans:property name="username" value="sa"/>
<beans:property name="password" value=""/>
</beans:bean>
</beans:beans>
15 楼
zhigang52110
2010-03-23
有CHM版的吗?
14 楼
lxtkong-029
2010-03-16
楼主辛苦了,不胜感激!
13 楼
JustDoNow
2010-01-25
xyz20003 写道
zhxing 写道
期待ptf 版。。。
用官方提供的maven配置尝试生成了一下pdf,失败了,不知道为何。
满江红现在也被封掉了。。。
为什么满江红会被封啊
12 楼
xyz20003
2010-01-21
01404421 写道
首先感谢LZ,看到这篇文章我才开始学习Spring Security,提个问题:看到第十章(http://www.family168.com/oa/springsecurity/html/ch102-concurrent-session.html),找不到 10.1.里添加监听器里提到的这个类,
org.springframework.security.ui.session.HttpSessionEventPublisher,这个在哪个Jar文件中可以找到?谢谢!!
还有10.1下面给出的链接是个无效链接。
org.springframework.security.ui.session.HttpSessionEventPublisher,这个在哪个Jar文件中可以找到?谢谢!!
还有10.1下面给出的链接是个无效链接。
org.springframework.security.ui.session.HttpSessionEventPublisher在spring-security-core-2.0.5.RELEASE.jar中,我们写的文档是基于spring security-2.0.5而不是spring security-3.x。
spring security-3.x中包名都发生了变化,对应类名为:
org.springframework.security.web.session.HttpSessionEventPublisher,在spring-security-3.0.1.RELEASE.jar中。
链接问题已修正,多谢指出问题。
11 楼
01404421
2010-01-21
首先感谢LZ,看到这篇文章我才开始学习Spring Security,提个问题:看到第十章(http://www.family168.com/oa/springsecurity/html/ch102-concurrent-session.html),找不到 10.1.里添加监听器里提到的这个类,
org.springframework.security.ui.session.HttpSessionEventPublisher,这个在哪个Jar文件中可以找到?谢谢!!
还有10.1下面给出的链接是个无效链接。
org.springframework.security.ui.session.HttpSessionEventPublisher,这个在哪个Jar文件中可以找到?谢谢!!
还有10.1下面给出的链接是个无效链接。
10 楼
xyz20003
2010-01-21
surpass 写道
Araxis Merge 比较强的比较工具
多谢,我去尝试一下
9 楼
surpass
2010-01-20
Araxis Merge 比较强的比较工具
8 楼
ithero
2010-01-20
楼主更新的真快啊。非常感谢,也希望能提供一个PDF版
7 楼
xyz20003
2010-01-20
zhxing 写道
期待ptf 版。。。
用官方提供的maven配置尝试生成了一下pdf,失败了,不知道为何。
满江红现在也被封掉了。。。
6 楼
zhxing
2010-01-20
期待ptf 版。。。
发表评论
-
spring security权限管理手册升级至spring security-3.1.3
2012-12-08 01:01 12295费了半天劲,终于把原来基于spring security 2. ... -
请把acegi替换成Spring Security(内附视频)
2010-03-22 09:54 6560在对web项目进行权限管理时,采用的方法无非是写一大堆JSP或 ... -
敬献Spring Security-3.x官方文档中文版
2009-12-29 11:43 10874Spring Security-3.x新近发布,整体的项 ... -
【分享】《基于Spring Security的ACL实现与扩展》内附ppt下载
2009-09-21 09:43 3450上次朋友间技术交流整理的ppt文档,因为之前一直在整理Spri ... -
Spring Security 安全权限管理手册(0.1.0更新)
2009-08-05 10:26 5032随着内容的堆叠,文档结构开始渐渐混乱了,到0.1.0为止关于认 ... -
Spring Security 安全权限管理手册(0.0.9更新)
2009-07-27 09:27 3276这次更新中包含了一个在用户输入密码错误三次后锁定账户的示 ... -
Spring Security 安全权限管理手册(0.0.8更新)
2009-07-20 09:58 1888Spring Security-2.0.5发布,这个bug ... -
Spring Security 安全权限管理手册(0.0.7更新)
2009-07-13 00:38 3194这一次迭代,对章节的命名进行了这里,目标是尽快覆盖Spring ... -
Spring Security 安全权限管理手册(0.0.6更新)
2009-07-10 01:54 1667这一次,我们添加了taglib标签库的时候,以及如何使用多种方 ... -
Spring Security手册更新cas, basic, acl
2009-06-29 18:13 2667这次更新的都是重头戏,CAS和ACL。其中ACL只是简述了Sp ... -
Spring Security手册更新——添加“管理会话”和对namespace,database
2009-06-22 10:04 1940新增的部分有,第八章“管理会话”,附录D,E分别整 ... -
图解Spring Security默认使用的过滤器
2009-06-15 10:38 3859第 9 章 图解过滤器 图 9.1. au ... -
Spring Security-2.0导航-基础篇,又添两章
2009-06-10 10:31 1914目前我们在基础篇中已经编写了六章,基本上可 ... -
Spring Security-2.0入门教程(基础篇)
2009-06-04 17:48 4773欢迎阅读咱们写的Spring Security教程,咱们既不想 ... -
springsecurity-2.x官方文档中文翻译初步整理完成,附上几个例子
2008-08-17 11:12 7889预览地址:http://family168.com/tutor ... -
(翻译)Spring Security-2.0.x参考文档“领域对象安全”
2008-08-13 00:18 2197领域对象安全 24.1. 概述 请注意:在2.0.0之前,S ... -
(翻译)Spring Security-2.0.x参考文档“安全对象实现”
2008-08-12 09:50 2025安全对象实现 23.1. AOP联盟 (MethodInvoc ... -
(翻译)Spring Security-2.0.x参考文档“通用授权概念”
2008-08-11 18:22 2818通用授权概念 22.1. 授权 在认证部分简略提过了,所有的 ... -
(翻译)Spring Security-2.0.x参考文档“安全数据库表结构”
2008-08-10 09:52 2034安全数据库表结构 可以为框架采用不同的数据库结构,这个附录为 ... -
(翻译)Spring Security-2.0.x参考文档“容器适配器认证”
2008-08-09 10:08 1930容器适配器认证 21.1. 概述 非常早期版本的Spring ...
相关推荐
《Spring3_权威开发指南》和《Spring3Security-3.0.1中文官方文档》是两本关于Spring框架的中文参考资料,对于深入理解和使用Spring 3.0有着极高的价值。Spring作为Java领域的核心框架之一,其强大的功能和灵活的...
Spring Security-3.0.1 中文官方文档(翻译版) Spring Security-3.0.1 中文官方文档(翻译版)
总的来说,Spring Security-3.0.1中文官方文档是学习和掌握这个安全框架的重要资源,无论你是初学者还是有经验的开发人员,都能从中获益良多。通过深入阅读和实践,你将能够构建出安全、健壮的Spring应用程序。
SpringSecurity-3.0.1中文官方文档(翻译版).pdf 入门SpringSecurity指导
spring-security-acl-3.1.4.RELEASE spring-security-cas-3.1.4.RELEASE spring-security-config-3.1.4.RELEASE spring-security-core-3.1.4.RELEASE spring-security-ldap-...还有Spring Security-3.0.1 中文官方文档
Spring Security-3.0.1中文官方文档
总的来说,Spring Security 3.0.1中文官方文档涵盖了Spring Security框架从基本的安装配置到高级安全特性的方方面面,是开发者学习和参考的重要资料。随着版本从SVN迁移到GIT,社区成员也期待有经验的开发者推荐合适...
**知识点详解:Spring Security-3.0.1中文官方文档** **一、Spring Security概览** **1.1 Spring Security是什么?** Spring Security是Spring框架的一部分,它为Web和非Web应用程序提供了全面的安全服务,包括...
### Spring Security 3.0.1 官方文档解析 #### 一、Spring Security 概览 ##### 1.1 Spring Security 是什么? Spring Security 是一个功能强大的安全框架,为基于 Java 的应用程序提供了全面的安全解决方案。它...
- 文档中包含了中文翻译,方便中国开发者理解和使用,这对于学习和部署Spring Security项目来说是一大助力。 10. **社区支持** - Spring Security有一个活跃的社区,提供了丰富的资源、示例和插件,帮助开发者...
Spring Security 为基于J2EE 企业应用软件提供了全面安全服务。特别是使用领先的 J2EE 解决方案-spring 框架开发的企业软件项目。如果你没有使用Spring 开发企业软件, 我们热情的推荐你仔细研究一下。熟悉Spring-...
Spring Security是一个功能强大且...整体上,Spring Security 3.0.1文档涵盖了Spring Security的核心概念、使用方法、配置细节以及社区参与途径等多个方面,为开发者提供了一个全面了解和使用Spring Security的指南。
一种是全部利用配置文件,将用户、权限、资源(url)硬编码在xml文件中。 二种是用户和权限用数据库存储,而资源(url)和权限的对应采用硬编码配置。 三种是细分角色和权限,并将用户、角色、权限和资源均采用数据库...
Spring Security 是一个强大的和高度可定制的身份...总之,Spring Security 3.0.1中文官方文档为开发者提供了详尽的指导,涵盖了从基础概念到高级特性的所有方面,是学习和实施Spring Security安全策略的重要参考资料。
### Spring Security 3.0.1 中文自学教程知识点概览 #### 一、Spring Security 简介 ##### 1.1 Spring Security 是什么? Spring Security 是一款强大的、高度可定制的身份验证与授权框架。它能够帮助开发者保护...