1.认证
spring security3这本书中这样描述认证:"认证是鉴别我们应用中的用户是他们所声明的那个人",,其实这句话的大概意思是:用户通过提供一些验证信息给服务器,服务器接收验证信息后和一些原数据进行对比(如数据库等),对比如果成功,那么就说明用户通过了认证。
2.授权
有两种授权的概念,分别是这样的:
“
第一个是已经认证的安全实体与一个或多个权限(authorities)的匹配关系(通常称为角色)。例如,一个非正式的用户访问你的网站将被视为只有访问的权限而一个网站的管理员将会被分配管理的权限。
第二个是分配权限检查给系统中要进行安全保护的资源。通常这将会在系统的开发过程中进行,有可能会通过代码进行明确的声明也可能通过参数进行设置。例如,在我们应用中管理宠物商店详细目录的界面只能对具有管理权限的用户开放。
”
书中这样诠释了这两种授权,以我的理解看来,大概是这样的意思: 第一种授权的概念是,当用户通过一些凭证信息交给服务器去验证时,服务器通过验证,然后将此用户的一些权限交付给验证的用户,这个过程叫做授权。第二种授权的概念是,当用户访问某一个页面时,服务器会判断用户是否有权限去访问该页面,如果有权限访问,将会让用户去访问,这种方式也叫做授权。
3.运行第一个项目
我将书中的第一个例子运行起来了,配置和修改了部分的xml文件。大概是跑起来了,我在此粗略的说一下项目的搭建架构,和spring security配置文件中,我们可以看到的一些内容。
首先我们先来看一下项目的web.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="DogStoreApp" version="2.5">
<display-name>Dog Store</display-name>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/dogstore-security.xml
/WEB-INF/dogstore-base.xml
</param-value>
</context-param>
<!-- 初始化spring容器的监听器 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- spring mvc的一个servlet 其实就是拦截器 -->
<servlet>
<servlet-name>dogstore</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dogstore</servlet-name>
<url-pattern>*.do</url-pattern>
<url-pattern>/home.do</url-pattern>
</servlet-mapping>
<!-- spring security的过滤器 -->
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>home.do</welcome-file>
</welcome-file-list>
</web-app>
如果看一个java web项目一般来讲,我们通过查看他的web.xml文件,就可以猜出他大概用了哪些架构。通过以上的xml,我们可以看出,项目使用了3个部分的架构:spring原生框架、spring mvc框架、spring security框架..前两种框架我就不说了,如果大家不懂,去查一下相关书籍就可以了,针对springsecurity我们可以看到,他使用了一个过滤器的形式去拦截项目中的所有url路径. 然后,在上边的过滤器中我们可以看到,拦截到的请求会交给DelegatingFilterProxy这个类去处理,其实这个类就是一个代理的过滤器链。里边应该包含了很多过滤器(这些我们先不用去管他,先知道这样配置就好了),然后,我们可以猜测出来这样的一个过滤器链就应该是整个spring security的核心,而且我们也应该可以猜出来如果spring security使用过滤器为核心的话,那么过滤器肯定是可以配置的。查看spring3文档时,文档中建议我们不要修改filter-name(即 springSecurityFilterChain).特别注意.
那好,接下来我们查看一下spring security的配置文件。
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:beans="http://www.springframework.org/schema/beans"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-3.2.xsd
">
<!-- Ch 2 Start -->
<http auto-config="true">
<intercept-url pattern="/*" access="ROLE_USER" />
</http>
<!-- Ch 2 Unanimous Based AccessDecisionManager <http auto-config="true"
access-decision-manager-ref="unanimousBased"> <intercept-url pattern="/*"
access="ROLE_USER"/> </http> -->
<!-- Ch 2 SpEL <http auto-config="true" use-expressions="true" access-decision-manager-ref="unanimousBased">
<intercept-url pattern="/*" access="hasRole('ROLE_USER')"/> </http> -->
<authentication-manager alias="authenticationManager">
<authentication-provider>
<user-service>
<user authorities="ROLE_USER" name="guest" password="guest" />
</user-service>
</authentication-provider>
</authentication-manager>
</beans:beans>
简单的可以看出来,spring security文档正文中使用了两个标签,我们从他们大概的字面上可以了解到,第一个http标签其实主要是配置拦截url用的,里边大概配置了如果你要访问某个路径,需要哪个连接权限,而http标签下边的authentication-manger标签下的标签则配置了那些用户都拥有哪些权限,,,这是我们从字面上了解到的内容,我们不需要了解太深入,。这次只需要把这个项目运行起来,然后通过运行项目,先读懂里边的大概流程就可以了。
我将项目调整完成后,录制了一个关于运行项目的小视频可以供大家参考。
我将调整完成的项目和视频发布到了百度网盘上。大家可以免费下载。