Spring Security教程系列(一)基础篇-1

时间:2023-03-09 08:20:54
Spring Security教程系列(一)基础篇-1

第 1 章 一个简单的HelloWorld

第 1 章 一个简单的HelloWorld

Spring Security中可以使用Acegi-1.x时代的普通配置方式,也可以使用从2.0时代才出现的命名空间配置方式,实际上这两者实现的功能是完全一致的,只是新的命名空间配置方式可以把原来需要几百行的配置压缩成短短的几十行。我们的教程中都会使用命名空间的方式进行配置,凡事务求最简。

1.1. 配置过滤器

为了在项目中使用Spring Security控制权限,首先要在web.xml中配置过滤器,这样我们就可以控制对这个项目的每个请求了。

<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>

所有的用户在访问项目之前,都要先通过Spring Security的检测,这从第一时间把没有授权的请求排除在系统之外,保证系统资源的安全。关于过滤器配置的更多讲解可以参考http://www.family168.com/tutorial/jsp/html/jsp-ch-07.html#jsp-ch-07-03-01

1.2. 使用命名空间

在applicationContext.xml中使用Spring Security提供的命名空间进行配置。

spring 2.0的旧的命名空间

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"1
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'>2
<intercept-url pattern="/admin.jsp" access="ROLE_ADMIN" />3
<intercept-url pattern="/**" access="ROLE_USER" />
</http> <authentication-provider>
<user-service>
<user name="admin" password="admin" authorities="ROLE_USER, ROLE_ADMIN" />4
<user name="user" password="user" authorities="ROLE_USER" />
</user-service>
</authentication-provider> </beans:beans>

使用spring securety3.0以上的命名空间

<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-3.0.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security.xsd"> <http auto-config="true">2
<intercept-url pattern="/admin.jsp" access="ROLE_ADMIN" />3
<intercept-url pattern="/**" access="ROLE_USER" />
<form-login/>
</http> <authentication-provider>
<user-service>
<user name="admin" password="admin" authorities="ROLE_USER, ROLE_ADMIN" />4
<user name="user" password="user" authorities="ROLE_USER" />
</user-service>
</authentication-provider> </beans:beans>

Spring Security教程系列(一)基础篇-1

声明在xml中使用Spring Security提供的命名空间。

Spring Security教程系列(一)基础篇-1

http部分配置如何拦截用户请求。auto-config='true'将自动配置几种常用的权限控制机制,包括form, anonymous, rememberMe。

Spring Security教程系列(一)基础篇-1

我们利用intercept-url来判断用户需要具有何种权限才能访问对应的url资源,可以在pattern中指定一个特定的url资源,也可以使用通配符指定一组类似的url资源。例子中定义的两个intercepter-url,第一个用来控制对/admin.jsp的访问,第二个使用了通配符/**,说明它将控制对系统中所有url资源的访问。

在实际使用中,Spring Security采用的是一种就近原则,就是说当用户访问的url资源满足多个intercepter-url时,系统将使用第一个符合条件的intercept-url进行权限控制。在我们这个例子中就是,当用户访问/admin.jsp时,虽然两个intercept-url都满足要求,但因为第一个intercept-url排在上面,所以Spring Security会使用第一个intercept-url中的配置处理对/admin.jsp的请求,也就是说,只有那些拥有了ROLE_ADMIN权限的用户才能访问/admin.jsp。

access指定的权限部分比较有趣,大家可以注意到这些权限标示符都是以ROLE_开头的,实际上这与Spring Security中的Voter机制有着千丝万缕的联系,只有包含了特定前缀的字符串才会被Spring Security处理。目前来说我们只需要记住这一点就可以了,在教程以后的部分中我们会详细讲解Voter的内容。

Spring Security教程系列(一)基础篇-1

user-service中定义了两个用户,admin和user。为了简便起见,我们使用明文定义了两个用户对应的密码,这只是为了当前演示的方便,之后的例子中我们会使用Spring Security提供的加密方式,避免用户密码被他人窃取。

最最重要的部分是authorities,这里定义了这个用户登陆之后将会拥有的权限,它与上面intercept-url中定义的权限内容一一对应。每个用户可以同时拥有多个权限,例子中的admin用户就拥有ROLE_ADMIN和ROLE_USER两种权限,这使得admin用户在登陆之后可以访问ROLE_ADMIN和ROLE_USER允许访问的所有资源。

与之对应的是,user用户就只拥有ROLE_USER权限,所以他只能访问ROLE_USER允许访问的资源,而不能访问ROLE_ADMIN允许访问的资源

1.3. 完善整个项目

因为Spring Security是建立在Spring的基础之上的,所以web.xml中除了需要配置我们刚刚提到的过滤器,还要加上加载Spring的相关配置。最终得到的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="WebApp_ID" version="2.5">
<display-name>spring_security_1</display-name> <context-param>
<param-name>contextConfigLocation</param-name>
<!-- 应用上下文配置文件 -->
<!-- 两种位置写法 -->
<!-- springMvc和spring security 两个配置文件 -->
<!-- <param-value>/WEB-INF/spring-servlet.xml</param-value> -->
<param-value>classpath:spring-servlet2.xml,classpath:applicationContext-security.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener> <!-- spring securit start -->
<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>
<!-- spring securit start --> <!-- 配置spring核心servlet -->
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet> <!-- url-pattern配置为/ 拦截 -->
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping> </web-app>

演示不同权限的用户登陆之后可以访问不同的资源,我们为项目添加了两个jsp文件,admin.jsp和index.jsp。其中admin.jsp只有那些拥有ROLE_ADMIN权限的用户才能访问,而index.jsp只允许那些拥有ROLE_USER权限的用户才能访问。

最终我们的整个项目会变成下面这样:

aaarticlea/png;base64,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" alt="" />

等到项目启动完成后。打开浏览器访问http://localhost:8080/spring_security_1/就可以看到登陆页面。

aaarticlea/png;base64,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" alt="" />

这个简陋的页面是Spring Security自动生成的,一来为了演示的方便,二来避免用户自己编写登陆页面时犯错,Spring Security为了避免可能出现的风险,连测试用的登录页面都自动生成出来了。在这里我们就省去编写登陆页面的步骤,直接使用默认生成的登录页面进行演示吧。

如果输入的是正确的用户名和密码,比如user/user,系统在登陆成功后会默认跳转到index.jsp。

aaarticlea/png;base64,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" alt="" />

index。jsp的页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>登录首页</title>
</head>
<body>
<span color="red">登录成功!</span>
</body>
</html>

直接打开http://localhost:8080/spring_security_1/admin.jsp

aaarticlea/png;base64,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" alt="" />

很遗憾,user用户是无法访问/admin.jsp这个url资源的,这在上面的配置文件中已经有过深入的讨论。我们在这里再简要重复一遍:user用户拥有ROLE_USER权限,但是/admin.jsp资源需要用户拥有ROLE_ADMIN权限才能访问,所以当user用户视图访问被保护的/admin.jsp时,Spring Security会在中途拦截这一请求,返回拒绝访问页面。

为了正常访问admin.jsp,使用admin/admin登陆系统,然后再次点击admin.jsp链接就会显示出admin.jsp中的内容。

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAZQAAACvCAIAAABVbb8tAAAYpUlEQVR4nO2d/W8bx52H+d8YCBQIOOOAK9oDDocD7tqmvcJNEyaF0rtL2iDpJfAlbc+OY9e04zhy0tQ+J0qcSFUS2/RLaIXyi6gXyhYpxaRsUZRESqJeIlNSLJGiRHJJ6s0ywPthyd2Z2dnl6s3SyJ8H8wO5nJ2dnZ199juzI9syDwAAAmLZ6goAAMBaWIW8JEmKxWJDQ0NdXV1+v9/j8Xg8Hr/fHwwG+wcGYrHY5tUSAAAYTMlLkqT+gQGPx9PVFRgaHp6OxWcSCSmTkTKZmUTi+/v3x8bGuroCra03+wcGNrvGAAAwX1JekiQNDQ19++23/QODM4nE/MKCQZIymf6BQSgMAPAIMJKXJEnBYLCrKxCfmTHWFpmSqVRPT6/f75ck6ZGdBgDgccOS02FmZqa9vaN/YDCVTufm51ebhoaHb9269Xenc7vP5JGQkJA2PPHllU6nfT5fNDq+Bm0paWo65vV6l5aWHgIAwEbDGTbKo8X+gUHzQ0W9NDY2dvfu3TwAAGw0nMgrEokEgz3JVGo9YZeSgsGee/fubXi9E4nEhpcJABAIVl7pdLqjo2M6FjMjptv+Tv+dLuM8qXTa4/EsLS1tbL3D4TCzZctH4EhIm50ACSuvSCQS7h8wY65r1xv2v314/9uHb97ylJy8HxwcNKjE8vJyJBLxer0ul6u+vt7r9fb19RnXG/JCegwTIGHl1d7eMZNImDfX/rcPHzx8NJvLGWROplIej0evBrFYrKWlJRQK+Xy+QCDg8/kmJycdDofL5YrFYnp7QV5Ij2ECJJS8pqen/f7OVZlr/9uHb3m8JXe5e7drZmZGe/hYLObxeHK5XDKZDIVCdrvdbre7XC673V5fX+9wOPT8xZVXJJ/3NK23f7wRzecT+d1n8ruD+fx8/o2t7q+PKG3/k93qGtYm8omoucxN+UQ+X7uxZZ7J74a8aCxZgsHBwVA4nM3lDNJV2lyttzzG+eU0Ovpdf38/c+zl5eWWlpbl5WX5azwel7Ul43A4IpGIw+Hg1ltgeQWLNSYLX+dG5ac1V3ir1fAoahgsXlk6eebzkWDp3SGv7QYlr0AgMDI6uuHmyuZy96LjgUCAOXYkElE2JpNJuwZ5Fow7/yWAvLi7E926NlE8UFM+Uaw5s9FUzlXehDsgreFMI3Iv0crL9FVerWg2IwESatjo8/nuT02ZHC1y08effs7ddy6Z1E57eb3eycnJycnJUCjkcDi08rLb7cvLy16vV1tvUeVFPvyLGdQjniGcZT4n9+uOTquVlyx6qvWIn0wqCfLablCRV3t7Rywe54ZObe0dJc0lJ+7uidlZrbzq6+vdbreeturr6yORiJxNW++S8vLMqz8xd7hMofcH2WyMvGqjhV/JjhtR9iH0FCFKfiOqFpuI5t+IqjkjROgkl1mboG5FJYP5nHK1lRoq5y5vkc+oNsGeiGc+H4nmE/l8PkGoVpag0izE3a4UK+/FF6WmPckt6qOF3qgnZW4N1cbP5z1R6hIY+4UrrwhxIky7MfVUt9Mdw9Oktm3h6hCnEMnnPcFir9M8zNQKEz1TvfpBdWMt5KXBkiG4detWYnY2k81qU2NLq0l5cXfPZLMtLW7m2PX19VpnORwOt9ttt9t9Pp+craGhQVtvY3l55tX+p4qjKZ/Is0/sSILtRpS8yP5KdEelEGXsxrltiMiLlNdujReYOEJVkvmcxGftLSqbVNlRqb9nnq4V0UrGo1T5XuXKiw1+m/IJ5RBkUElnM5AXp4Z0O6hHLBV78lsmoX5myyFOXz4Q2RnU3kI/CGvPsPIin1tM91O6jTaWJHdU+g8goeR1+/bt6Pg4Vz1pKWO/+HXpYeMnn3F3n5qebm/vYI7t9/tlYY2NjSWTyWQy6XA4AoGAPG0/NjYmv4V0u1nr5Y3lpenEEe3jnUhqjJbQyIsOrDxNmsEgfUNS5fOGjazF5vNv6MRT5nOyx5LtQxyaOXElRqNuGCbyIhpHzkNZSV8TsteUYskIVEaOUxjRG0Ve2hrS25V99a6vgbxYZRjEg+TzSdPatcxnJvJq0pSgKVNuKCa6J/0uR4iAhBo23rlzZ2T0O71JdymTtV9yKJ5666DN13nH5IT9+MREZ2cnc+y+vj45wlJeOOZyOTnsUtZMrGXC3rS85B7DBCxrlNcZTRfkyYsbOlF9ulig+Zycm5CWqd5NuBnyUvbK6z8wNlZeZIsZz3iyldFcX+VXbofZVHkpX/N5owYHJJS8wv39gUDAwEFr9lcgEOAulZBHjslkUtkor1BV5FVfX6+ojWTNw0ZlaOAJUkMhpe+WkJfesDFKRPia3ZU6aMePTF+nHsXmcmoFqk42KQelx1ZKK5mXl2fe1LDRE6V3ZEZeCfp0zuR3B4uPBPLV6qrkJQekidJvV3RlRDeL2lxBtt02Sl7a2Qal3ZQtpEyV/ICEGjaOj49fvXZdb9KKO35866DN13nXeJdMNutuvRmPx7WHj8Vi5PRWPp9fXl52u90ul0seP05OTnLrXXLCnjunzi6SImdJTUZe9F5MvCBTe4aqAzNhX6vuTE23swWazqmNbiL0XnIGdbq9eNuvSl5ksQYT9pwT0U7h87Jx3wboyUvZnXwnUPL9I9NQzLhMae1ElJ5ALHYYz8ZFXlp5aZfvReQ+SW8EJBaJpqGh4f7UlPzv0+ulVFoi/XXw8FHj/DOJRENDw4MHD7g1SCaT9fX1oVAomUzG43HZWYFAoKGhQc9cefx5EJFKLhApORm06rTdVrSuvj4b3yZrStqBpJK4lxWQUJFXJpPp6elpbGouGUmR8de1Gy7jzN729lAoZFyPvr4+edmE/Laxr6+PO1pUgLwKycR9uyE3qvoyjhiVR+hLsFVLZMlZAmZxQ15veLs9FvQaPHggr5Kw8komk5cuXZ6anjbjr8aW1hb3TeNsidlZp9O5uLi4sfWGvMynjYoymNey2yJpX/IKkpQpBYMMkJcxrLwymczg4OCVK3Ul5WUytbhbh4eHN7ze2hm0Le+OSEibnQAJO+cl09jY6PP5jGeyzCSfz+dyuVZWVrb6NAEAOw1O5CUPHi9//XVXV/d6Yq6uQPCbTRgwAgBAXi/ykiRpenr63Llza46/fD7f+fPnf/h/sS2PtJGQkHZk0pWXJElzc3OOK1fq6pwlF08wCyNuNDQ4rlyZmprihnUAALB+jOQlc/fu3aqqT5uaW8xoq6m5paamxuPxzM3NlSwZAADWTGl5SZI0NzfX0tJy6tTpujrnbZ9vMDIsx2IzicT9qamxe/d8Pt/Zs+dramoaGxunpqY2u9IAAGBKXgo9PT0tLS0XL16srq45der0J598Ul1d89VXX9VfvTo8PByPxzeplgAAwLA6eQEAwDbBkgYAAAGBvAAAQgJ5AQCExLKv7v7OTlvdwgCATcGyr+5+70RmpybIC4CdCuQFABASyAsAICSUvI41jbzmCBmkY00jW+6j9chrsvfwvdu/NkiTvYe36kqARwl6wg6AkterF4P+6IKSbt9b+Da64B3NeUZz3u9ybSPZVy8Gt9xH65HXSPtzDxfbHi56Hi56Hi62PVy4+XC+dWW+eSXXtJJrfpBtHGl/bquuxLaiLxQ6dbpq34FDkiTtO3Bo34FDge5goDsof5Y3njpd1RcKbXVN1wh6wg6Aktcr9i5/dOHWSO7mSO7mSM49lG0eyjZGMjcGpKvh9I1B6RV715b7aD3yirRZHy62rcy7VnINK7kbD7LXHmTqH0jfLKcdS6lLyylHpM26VVdiW3Hs+IlQuD+Xy0mSlMvlcrmc/Hf88md5Yyjcf+z4ia2u6RpBT9gBUPJ6+WynP7pQMNdwrnko6xrMXO+XrobT3/SlrvanXz7baSiLC09ZuDy5163k6dz7hMVisZ6cyNTtf3LX/s7eiUzd/ifVPO4ju/ZcoIp1H9llsZ6kj0Xvq3s4Rl5h9zMPFz1yf10p9Ne65fTXS6lLi8nzS8mLYfczZlvObrVY7dqNVjvnN7+tzGKxWMpsfl4xvM3m8vhtZcwPdqtBaX5bmbbKXOTwqiT7DhxaZaXtVgun2ZTqFS4gJwe3uQsFFpAPp20THuvuCXJlrXbigH5bGXmN1dPhIJ8LUXndPGnORTV3jjseSl6/+6LDH11oHc65h3MN/enXP3L+4KXD//DS4VdPf3OpO1HXl/rdFx0l5PXEkTrN9pN7ijapNrxYFstT1ZSYSFVZGKPpbOyd6Nz7hK68go2/erjoWcldX8lee5BxLsv9NXlxae78YuLLxdlzwcZfmW05/t3kt1ltdrlrMT1T6W3GPZZ/b+vqi/2hlLzMHCydTsvhVUlyuZyJo1jt6ikTN6TmxA3vR315FXaTPzAH13X1unqCuStIGYZ6bihfDK4WuQPkxYeS14s1Hn90oWUo2xTJvna67p//WHXM2X30m+5/erPqpb86vu6Z+21te+d3ybVHXtVWxkqMjGR59U507t1zpM59ZBe3sD0XONGZOXl13fjlw4W2B9mrhf6auryUvLA0d24x8cVCvHph5otu19Nzs3ovKOkuQ/Uo9YvfVla4C+Vt8k1H7moiOCp1d9BCIG9TcqvmMI8q8lKP41c8bnhgEzejKXnZydjH8KDr6gnmwltz8rJarZqA0W61WG08eRUzQV7pdJqR1399ftMfXWiKZBsGpB8f+Oy9az1NEel6f8pW1/0v+84ccY+/UOV6+W8eu29szZHXrv2dJ/fwlUTIi0hc3xXlxYwZd+3vNJaX/+qehwttDzLO5fQVub8uzp5dmKmZn66an6qaG3yj2/X0nRvPjw9d57cW0WnYzmZXPqpjAr68CnvzGoGnm9X1Uu19ZSBC/Xt7vcNGud7ETbqJ8lJbz2olzW9Y4rp6gt1aZvPz29VqJ+Wl2/JkF7FbC01V9JXdqhZDP4zskBcJJa//+LT527H5GwNSXSj9dKXj9c+azvjip9unflvV8O/vXt57bfSFKldzJP3iZ25evKN/pWSKXju5x8JKioikCmpTAqtS8lKLKuQ0kldH3S9W5luX046luXMLM9W5qY+ykx9I0Xele0cyEx/Eg7/pdj29mLra4TQcMljtaXqmgw6q/EofJIIO5t7j9T6dbbp3vX4NuBXm7K4vlHUMG3ljU6t2BG0YXOpMlvHyqPe/5vhGvlx/T+C0K92k5oeNyhPPbysrs9mK41/DyMugqR4bKHm9UOXyjGZrO2eq/fEXP77xg9+fePbYuV+9c/bvX638w1mvLK/zgdkXqlylxn38EIzSEwM5DCRHhcw0mVzsWuXVdvnny5mm3NTp7Pcns5MfZMbfk6LH0mO21OhBKXpc7rLzsTNtl39u0GSKlAohFduFi9NQJeRl6qbl3eJKpsKxqSpskLw83nYz8vJ420u1E1UHvfHWOiIv8lB2K9WGRBSsYf09QS/yIk+K4yvqS7E91JlLZdahlLweZ2kVoeRVcfpa05D0uS/+6+Pnf/j6h8+87/jR63/50Wt/+e+/3azunJbl9VHHdMXpa3ryIixjfYqKxdjXhb28iXmtvOg8RSeuVV7uCz9bSjqz33+YmTghRY9L946mv/tzauRAcnifNHZE7rKZiePuCz8r1W52q6WsjNOD/LYyS1lZIeIn5OW3lVn0nsr68N4mWkhTqeMLjQ6JqR89NmfYyJ+w3yx5EUM47VhOv9CN6wm6lTc7bKSmuMggDPIqASWv508668OpZ49+ufs///zyJw1fdcXPdce/7Ip/1HH/Q+99RV7Pn3SairwUB2lHhVyUYE3OX5wgI8aYHHmRBZSUV9O5ny7OXsiMVyqP2dTIW8mhP81F3kyPHlK6bNO5nxq3WuFJqQlelAkujbyY/qbXsekuyVlXQN3DfltZYZ5HE0gZzimXZl1zXgVR263FyinnXqyV4X3N904JeSmDSMrt+m2wzp5gNOjlvjDQj7xsRKBusxYajpgvTKvvIqw2yIuEktdzH1ypaR/7x98ff+XThhr/9PHWiXdaJ2wt44eao5W3JhV5PffBFQN5EXqy7t3/5K79R54iwi5SRlRU5T6yi5RXwWUXyH17NTbkzfEbyavhq58sxL8oPGZH304O70sO/XFu8H9mB15PDb+ldNmGr35i0GR2q9pBmYAqXdxIKqzQ5+zMFAh3XofcqL63pIqmNxU1QL2dSmsf1oQ/qKe+Duub86LfthZncQyOuf7Ia7XyWmdPII/Dzm2pDV9yDCk7UH3ZQ1yz4kNJESX5FIC80uk0Iy/ricsXu2erb49Xd06/2zpxtGX8cMv4weboW433jrVOyPI6dWuy4q8ceSlB0FPVdIhEhlRceRWXRCgiK0qtc+8TFmpcWW21aEI5TTKS17XaH+emP0+PHkqNvJUc+t+5yJtzA3tn+19LhF9NDv1J7rJzY+80nP0Fv7XUlYnMNnZJKjlSslhttjJ5fKfkKxl5MQseixDLuog+zS2R6eVaexnd3BuwSJUMs9Q6b4q8bIU4SLN+RL/QdfYEjryKF0DVKPMkWtM6L7oYyIuCktez71388u7MJ77pk+1TH3rvf9D2/Ym274/fnHjHPX7UPS7L6zcfXrnkG9URBzm+sz71BDG/brFwV5kaLPtSVUUsHyuIjysvZWqfcCUjL2fNv2XvfyzdOy6NHU1/dzg1ejA1ciA5tG8u8se5yB/kLnv97C/HBpu1LWU0/av8WDSK1Up0YktxPMBRCVMKsRPV10vfjtxhI/MWjrWX/pz9u5Xvdwd7jM3VHex5t/J9nbqoYiXvc83Nylm9yvlNj6KsmFlATXNyWE9P0J4t9ymjfaCpV9IgElVOmx9i6z/vHj8oeb35t+Zn3rtgkPZWN/lGZkuZaxsl9m3j1b3ffP6vBqnN+ftEfHKrLsb2oae379jxE8Z/mH3s+Ime3r6trukaQU/YAVDy8vRGr7f3XvME9VJz52B7aOLOcHzLrbQ2eY2NjQWDwS59BgYGotFoLBbbquuxTZAkKZvNZrPZdDotf5CjLe3Gra7pGkFP2AHgHyMEAAgJ5AUAEBLICwAgJPivzwAAQmLxAgCAgFjyAAAgIJAXAEBIIC8AgJBAXgAAIYG8AABCAnkBAIQE8gIACAnkBQAQEsgLACAkkBcAQEggLwCAkEBeAAAhWa28wpXllvLKsPJF+bxhKEdwVljMlB6uLLdUODe4EgCA7Y6BvJwVmn/sv8KpuCVcWW6xlFc6w6RewpXlJf7PBBOaKUgrHA4XjmEsMAN5OSvMHREAIB5mI69wZXnRAwWpFaViMkDKm46R6ALDTmdYqQBPhM4KXUFBXgDsXIwjr+KNTw0WyW+sHkqGXpRKSgdqmt1UARrszK82AGAnoS+vcNhZGLVxYhtnhaW8vNxSelBHlchGXvxQzDCU0+7C1I78CnkBsHMpNWwshlbsBFhFJSMG81GURXEeX16Go0uuvMh6kF8hLwB2LkbyKjllVDJDiVkurfAqnMxObNTHjd4gLwAeP/TkRb1UNIygnBXq6JEd8RHT/OoG9Tv9TdlZLcVZwQ5MNfJi7MYu5YC8ANihlBo2GsVOmsmp4uoGZTPnG7m6Qkdexc1adWnrw/sOeQHwGLCh8iJ+UN8IVlRWllc4ZY1xpv313mGWl3PXeBXqUwzpNO8S4CsAHhPMyKvkxLvejhWVhGp0RVSA9JD8eoD8Ri0xIyf8mWKx3h6AxwQzi1R5fwVELAJjKRiGnnvX94yqR3qwSX0tr6ysYF3JG1XSoRgWqQKwczG1wl4z7+6ssFjKK5xhTjZKKPSozkn5h78yXpklU8XDG51yR6F51pGQFwA7F7N/HkQahKsdMg4ixpq62uGFboxslGI4IRu7LpVebQEA2PHoyovzZ9kGwBgAgEcL/j0vAICQQF4AACGBvAAAQgJ5AQCEBPICAAgJ5AUAEBLICwAgJJAXAEBIIC8AgJBAXgAAIYG8AABCAnkBAIQE8gIACAnkBQAQEsgLACAkkBcAQEggLwCAkEBeAAAhgbwAAEICeQEAhATyAgAICeQFABASyAsAICSQFwBASCAvAICQQF4AACGBvAAAQgJ5AQCEBPICAAgJ5AUAEBLICwAgJJAXAEBIIC8AgJBAXgAAIYG8AABCAnkBAIQE8gIACAnkBQAQEsgLACAkkBcAQEggLwCAkEBeAAAhgbwAAEICeQEAhATyAgAICeQFABASyAsAICSQFwBASCAvAICQQF4AACGBvAAAQgJ5AQCEBPICAAgJ5AUAEBLICwAgJJAXAEBIIC8AgJBAXgAAIYG8AABCAnkBAIQE8gIACAnkBQAQEsgLACAkkBcAQEggLwCAkEBeAAAhgbwAAEICeQEAhATyAgAICeQFABASyAsAICSQFwBASCAvAICQQF4AACGBvAAAQgJ5AQCEBPICAAgJ5AUAEBLICwAgJJAXAEBIIC8AgJBAXgAAIYG8AABCAnkBAIQE8gIACMn/A2h4Qfvj/du2AAAAAElFTkSuQmCC" alt="" />

根据我们之前的配置,admin用户拥有ROLE_ADMIN和ROLE_USER两个权限,因为他拥有ROLE_USER权限,所以可以访问/index.jsp,因为他拥有ROLE_ADMIN权限,所以他可以访问/admin.jsp。

至此,我们很高兴的宣布,咱们已经正式完成,并运行演示了一个最简单的由Spring Security保护的web系统,下一步我们会深入讨论Spring Security为我们提供的其他保护功能,多姿多彩的特性。


第 2 章 使用数据库管理用户权限

上一章节中,我们把用户信息和权限信息放到了xml文件中,这是为了演示如何使用最小的配置就可以使用Spring Security,而实际开发中,用户信息和权限信息通常是被保存在数据库中的,为此Spring Security提供了通过数据库获得用户权限信息的方式。

2.1. 修改配置文件

为了从数据库中获取用户权限信息,我们所需要的仅仅是修改配置文件中的authentication-provider部分。

将上一章配置文件中的user-service替换为jdbc-user-service,替换内容如下所示:

  <authentication-provider>
<jdbc-user-service data-source-ref="dataSource"/>
<!-- <user-service>
<user name="admin" password="admin" authorities="ROLE_USER, ROLE_ADMIN" />
<user name="user" password="user" authorities="ROLE_USER" />
</user-service> -->
</authentication-provider>

现在只要再为jdbc-user-service提供一个dataSource就可以让Spring Security使用数据库中的权限信息了。在此我们使用spring创建一个演示用的dataSource实现,这个dataSource会连接到mysql数据库,从中获取用户权限信息。[1]

 <beans:bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<beans:property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<beans:property name="url" value="jdbc:mysql://localhost/spring_security?useUnicode=true&amp;characterEncoding=utf-8"/>
<beans:property name="username" value="cqyusp_dev"/>
<beans:property name="password" value="cqyusp_dev"/>
</beans:bean>

最终的配置文件如下所示:

<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-3.0.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security.xsd"> <http auto-config="true">
<intercept-url pattern="/admin.jsp" access="ROLE_ADMIN" />
<intercept-url pattern="/**" access="ROLE_USER" />
<form-login/>
</http> <authentication-manager>
<authentication-provider>
<jdbc-user-service data-source-ref="dataSource"/>
<!-- <user-service>
<user name="admin" password="admin" authorities="ROLE_USER, ROLE_ADMIN" />
<user name="user" password="user" authorities="ROLE_USER" />
</user-service> -->
</authentication-provider>
</authentication-manager> <beans:bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<beans:property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<beans:property name="url" value="jdbc:mysql://localhost/spring_security?useUnicode=true&amp;characterEncoding=utf-8"/>
<beans:property name="username" value="cqyusp_dev"/>
<beans:property name="password" value="cqyusp_dev"/>
</beans:bean> </beans:beans>

2.2. 数据库表结构

Spring Security默认情况下需要两张表,用户表和权限表。以下是mysql中的建表语句

CREATE TABLE users(
username VARCHAR(50) NOT NULL PRIMARY KEY,
PASSWORD VARCHAR(50) NOT NULL,
enabled BOOLEAN NOT NULL
); CREATE TABLE authorities (
username VARCHAR(50) NOT NULL,
authority VARCHAR(50) NOT NULL,
CONSTRAINT fk_authorities_users FOREIGN KEY(username) REFERENCES users(username)
); CREATE UNIQUE INDEX ix_auth_username ON authorities (username,authority); INSERT INTO users(username,PASSWORD,enabled) VALUES('admin','admin',TRUE);
INSERT INTO users(username,PASSWORD,enabled) VALUES('user','user',TRUE); INSERT INTO authorities(username,authority) VALUES('admin','ROLE_ADMIN');
INSERT INTO authorities(username,authority) VALUES('admin','ROLE_USER');
INSERT INTO authorities(username,authority) VALUES('user','ROLE_USER');

Spring Security教程系列(一)基础篇-1

users:用户表。包含username用户登录名,password登陆密码,enabled用户是否被禁用三个字段。

其中username用户登录名为主键。

Spring Security教程系列(一)基础篇-1

authorities:权限表。包含username用户登录名,authorities对应权限两个字段。

其中username字段与users用户表的主键使用外键关联。

Spring Security教程系列(一)基础篇-1

对authorities权限表的username和authority创建唯一索引,提高查询效率。

Spring Security会在初始化时,从这两张表中获得用户信息和对应权限,将这些信息保存到缓存中。其中users表中的登录名和密码用来控制用户的登录,而权限表中的信息用来控制用户登陆后是否有权限访问受保护的系统资源。

上述sql中,我们创建了两个用户admin和user,其中admin拥有ROLE_ADMIN和ROLE_USER权限,而user只拥有ROLE_USER权限。这和我们上一章中的配置相同,因此本章实例的效果也和上一章完全相同,这里就不再赘述了

aaarticlea/png;base64,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59PfisHlBSXVH61NeH9V/GfrvjX8yAgBna9atfrrr792dXVdt25dZWWlRqP5/vvv09PTk5OTT58+HRMT4+DgYG9v7+HhIbAb5bNm6a9ceXH48It9+54HBj738nq2fv2zNWuefvXV048+ejJnzuOf/ezxj38srHMqBReYmH52LnJCQOfCl8dF/gebzkoQsg2p652fNVLvPD/Jo60xV3glnF9v8zUgubJzzvvdhK0v0AYoFQXrvLCmduOZwNkBn/9275/+HLX2893eZbX3jK6Z0rkhNTdk55PSuZ29vZubm5eX19atW52dnTdu3Ojq6rp27dqVK1fa2tra2dk5Ozs7OjqGhu4S2A3DtfQXYWGpf//3nPHknXeEr7dzyrusrCwgIGDRokV/+ctfHBwc1q1bV1ZzTw46z75DcoZ4nSM7V2RIXyC1LNmNqne+19f25s2b0u4PAHzM/MX2vqfD7GD0+iUX9AZsnTNi5f79/+pt88rlz+aW2trcXvmboiU/v/Dpb/f+OaU4X/j0MX2dr1m7dtOmTdu2bQsICPDz8zt06FBycnJkZOTBgwd9fX23b9/u7u6+d+/eAwcOCO+J4Xr78y1b9NevD505Uztr1ouIiGdff107a9bTr756tmaN0e/OGWzevNnGxsbb2/v48eNnz549evSoh4fHJ4s+u5KWLe3FdpPoHNm5IkN6nZMk2Xr7cuHZVRq16v7tTKn3BQBehHVe3fDgpS/+qe/psAmz876nw2LuOhZweYWx7PxyUfY/bf/1G7lf2VQuPtR88sXI0Ibbfr+rtX316n+9FvpRQdVtzl1lnP0pnTNUISY79/b2PnjwYExMzNGjR0tKStzc3N57773Y2NiYmJhvv/325MmTarVarM7d3IYuXhxKSKidNevFnj3P1qypnTXr6Z///MzOTuStcIaJtLS0uXPnXr58+erVq1FRUZGRkdHR0QUFBRERER/OX5BfUsNeg2VdbEd2rshAvXMAxGJU5//9zA8oo09f54ZcXORDRHwurzCm80WHV//i0qe/zvjstXMf7CmNJElSlb7+V0nz59z6889OLfT9ntujlDkMQdc5FWJ0vnHjxoSEhFOnTp0+fToqKqqoqCg4ONjNzS09Pf3IkSOJiYknT548efJkeHi48InMtDq3s7Pbvn17a2trZ2fn7t27XVxcTp061d3dffv27fXr1/sFclz5nzGdT8fEyM6VHVJXVEO9c2A5COj8v5/5gSFeCiUMRp/+xfa+p8OGVTGCJEnONXC6vELwYrvv4eT/uX327Cufrk11X5PimlSfQpLkN0VRa666rkl3/+X5P8w/YMu5TuqkT4mcHuJ1HhCwMzY29ujRo7GxsREREXv37i0sLCwsLNy/f/+BAwfi4+NjY2NjY2P3798vfCIzovPJXGyPiIiYM2fOzp073d3d79+/397efunSpc7Ozqqqqg0bNmzZsuUvX3zFeZBn7GI7snMEZ0it82nXO+e8K034CXISd6SDKSGg85dCiQlh7Ko756eRnpQbgp7uT/lUK5CdZ1WU/lPAG7+M/YBzvK/Ef/ha6Eec66Rn55wuZ4iHb99CQ3cdOXLk6NGjcXFxR48eDQoKcnV1dXNzCwoKio6Ojo+Pj4mJiY2N3bvXyCtNpq9zKjvPz89/++23HRwcbG1tHR0dHzx48PDhw9ra2qVLl9ra2jo4OHw4fwHnQbagW+GQnSsypNe5qeqdUwg/qCbygTQA2Ajp/It/eumLf6K7fMoX2w0WZ6f75tB5ad2df9z++ivh74bnRofnRuc3F5MkmVRzNTw3en/u0Z+Fv/P2fo5MtEL0xXaj+xYUFLxv3769e/caHmfdu3dvYGBgcHCwYc6BAwe++eabiIiI3bt3C6/HhDqvqqr6zW9+87e//e3LL788ePBgR0dHW1tba2urh4fHl19++dVXX332X3/mPMgWpHNk54oMi693LjBH4Blx6BxMAaN3tou80i58sb3v6TAz12cZfTo6Z6Rir/n/6X/vnPdy2Hsvh70XknGAJMm/Jjgafvy3wN+6JgZzrpOhc4PRGXPE6Dw0NNTT03PDhg0uLi7Ozs4bNmxYv379unXrNmzY4Orq6uHh4enp6efnNwM6p/PJJ5/Mnz8/PDy8vb29tLR02bJlTU1NLS0tGzdu/PDDDz25StpY1sV2ZOeKDMuud873ljdGIs6+Do/nxcEUMK7z6d3ZTl8PO903VXbOiKSCrH/2fuOlwHdeDv4gKvckSZJOaq+Xgz/4j4DfvRK8QODOdqPpnRid79ixIyQkJCQkZNeuXWFhYXv27NmzZ8/evXv37Nmze/fu3bt3h4WF7dq1y9/fX3g9Bp0/c3Ye13lY2LjOHRyEdU69H8YQF5LT5syZU1VVVVxc/Mknn3zyySeLFy++d+/e5cuX3//gQ2nvbJ9OYo3sXNlh2fXO+fzNWEryVF6By8GkMPdz5+zgdLlpdV5R17zz0uF/9n7jf++w+b8B77+888OXAt77N9/f/kfA26dyrvF1EU7vjH5lbvIYf8/rjRv6y5eHjh9/ERr63N392fLlT5csee7mNimdl9/WBYbuffvtt999990FCxZ89NFH8+fPX7BgwVtvv/Od+qK0r5GBzhF8Ydn1zoVfucqWPaf+ARDJzNc7F7h0L34lYuqdJxVkfXbY/meB7/+Pba/9KvTjlSc251RUSX56mlRMuf5KBZfODTn64qXL333v/TfeeGP+gt87rnPO1pRL+M72SQXnME2yEoRsw7LrnYvJzgXaQOdgUsy8zk0SYnSOmP5BFtD51IKucwTCaCin3jl7wuhtcdA5mBQWqnOEJAGdI2Y4LLveuZiL7ZzPo0PnYApA5wjx0ZLjMP2QfBQICwrLrnfOd7MbYynfzXHTGSawQqBzBAIh27DseufCShaQPbJzMAWgcwQCIduw7Hrn7GfK+R4xp9qTyNHBVIHOEQiEbEP6Aqmodw4sBegcgUDINqTXOYl658BCYOv8OABgDKk/oNYO6p0DIBZOnfeZAsPZ0CSrshQwZIUBnUuO1BXVUO8cWA58OtfkXZtO9NFO9Jq8a4NF3ooPxpCtIZQ9ZOhcDkitc1PUOxc5k+R5Yo2aw76Bjv3wG7Bm+HRemJ9KxVoR0NsX5qcyTvSPtAGKD2W7TUB4Sh0ydC4HpNf5NOudc0qX7951o++JI1l3v0PngIJP50WadCrE6JzevkiTztR56S7Fh7LdJiA8pQ4ZOpcDCql3PgWds1eF7BwIw6dzbeENKgzC5luDYSm9vbbwBuNEP1CxX/FhWW4L/5wgiEXhphCeqYa86XWCeN2JZ1cnt7cmHN1MfhgBG8uudz46BtbrYvjEzPdsOt8K4XJAh0/nJcVZVIjROb19SXEWU+dVkYoPy9K5Ju/aptflpXNNXuAXXDqf2t6aanQz+WEEbCy+3jlb3iTrgjnVWOQQRCb0wNrg03mZNocKMTqnty/T5jBO9OcWEwTxwbnamP5jHxAEQcxZ2l8b018b0399qc3o//QPbOZ8cK42pr82pnTbz8f++/889HpMf21Mf63rasOPxwztPzg32uznNnMYLWndR7di6EsQBEEsdg2dM96Ya0NTD8aQDbnmWGZJfLFvVBLnXV8bnUVXl9pp9ujcRbMpDzFnBn5BEATx2iY1femi8Aktx5ZSjffRmuVd0+xbNNrw80Bz6Hx8dGN7ct71NYJ4bfbrjN3jPA6BX7zuRM2njhinntkbMtPoZvLDCNgood658L+MxnzrEWaKxwIoCz6dl5fmUiFG5/T25aW5jBN9f11C6JwF5+oS+usS+us8V89Z3l+X0F+XcG7Jy6GpCf11Cf3RCwhiwbm6hP7U5TZjSydM1yWcW0IQxMuhqQn90Qtstu8ZnbPEc7S7YaIuoT/a07Ch0u0vG5r1py63IRacq0sInUPYbN8z2p1/Q1MLltsCvyAI4vPAsekx6+wLDB8T0mzXWIM5wj+nli6i1Msxc98iqotm/EfaytVOs2kXmcM/H7OdoSVtqVkutqudZlNupk2Hfz52HPYtGjsgnMch8Itxu9MGxdY554bMM7qZ/DACNhZf75whXWGdi5E0Z18ASH6dV5TlUyFG5/T2FWX5jBN9X8OZ0DkfnW0409dwpq9h2+o5q/oM0zEfUf91V8ec6Ws4U+L9ysT/0a+Epht6nTm7dHyaNWd8nfQ12HhH9DWc6UtfZbN02/g+xHxk4x0hsKEpBofOaUYZMzEtrSTG3UyllfSslD1T7TT780DD/C/2jfl+ouPPu75GrWH8DwLWIubumULn9KERBEHlzbTdGL+cznUcuI8YW+ecGzLT6GbywwjYKKfeOcH1TTlnS/ocxtoYDSB1QIdP51UVhVSI0Tm9fVVFIVPnd78Pnfvx2bvf9939vu/ujtVz1/SNTo9F5hobw8y4j218jzCX3v2+7+73Z21/EZrJN2dsnZlrbIixDVGrylxjY7tjfB8M8/k3NMVg65x+OZ2VHzNTbXbeyTFz9HL0F65Os6nrybLROfeIOHXOfRzE6pxzQ9C5IrH4eucC8ma0pE8QXIm7wCZEjRwoHT6dV1cVUyFG5/T21VXFTJ03pYTO/WVoVkpfU0roXIKY69jXlNLXFLCaWHS2KaWvKaUvy9GGPXNinF02ugauOQGrDd2zHG2WBRiWhs4lbHbE0meGzl10timlL36RzY5YgQ1NMbgutjMvpxvS61E/cWWldHNzzLwW/vmi2a+/tkl9bdPnr82mruTT/gKga4+hc/rW6Vf1TaZzHoly65z7OIwfsU2v819s59yQeUY3kx9GwEYJ9c75Mm+GwhlL2aui/1nA+VcCsHL4dF5bXUKFGJ3T29dWlzBO9L33M3oT/mj4vzfPf/1qgiCWh/beD11N+z+5OiGj934GvSVBEATxR/X9jN6c9fNos+b5J/Tezyjx/9VYg7H1LA/tvZ+hXj7W7M1fEQSxOmF06Tz/hJA3CeLN9Yb1r07g2tA0gjM73/T62OrHTEPdHDf79deI0avohtvWRhlLMTlnXjvv+prh22X6V+8cF67Hb46jzaRtnSAWzeZ5MGwaOp/wBYFBqGP7Rt3KN3oo2MfBcPMgdcQmfKE+Dv1+ggkbMtPoZvLDCNgood45waVzA5zzSa6cm+BJ3wnoHIzBp/PbteVUiHmNDL397dpyps5bbik+jFxsV2JY3LN5Uxid1B9Qa8ey651TMDwtIHLOXiSycyACPp3X366kQozO6e3rb1cyTvQ97YWKD44H1QiCYD1wpaSAzoG5kb5AKuqdA0uBT+cN9dXTCabOH5YrPpTtNgHhKXXI0LkckF7nJOqdAwsBBVJNCIasMKBzyUG9cwDEwqlzk0BYJaY6ekAmSP0BtXakrqiGeufAcoDOTYvUv8+ZJjk5WepdMCPKHp1FILXOp13vnI7ACYIQ8awaAMKY72K7QW+NdzqtJCidN7f0WE8YhCf5bph1dEBCpNf5dOqdi//zn8DjZ2DacOp8sMh7+gGdW0NA58CsWHa989ExsCTNl4tD52A6cOr8kTaAHmIeVGN0eaQNgM6tIaBzYFYUUu9c+Gs5guvhcqv9Ag9MGW6dl+6ihyidT+zyqHQXdG4NAZ0Ds2LZ9c4ZcLqZOnGwr70DMCk4dT5QsZ8eBmHzrcGwlNFloGK/SJ3HLiUIYmWscLOMoLlG20gd4nV+QkUQxKoTws1yQ9402kYGoRSdG14NzDzg0LnkWHa9c1Lw63N6G3YvkwwWWBXcOq+KpIconU/sMlAVKT47950rd1WbVufNLT3+b1qAqsWEMnTu/yax/CTHLwU6lxzLrnfOgE/h0DkwCZw676+NoYcYnTO69NfGUDq/4TNWP2Vu0Lj/YleOzlya6Dt3ZeydRFvqj9alib5zCYKY55vR2Tiavk/I4G/4zCOIeXPnGuaPNpM86DrP9h8b8psh43o4uWp0pkrt/+aqEy1UsRjDHIIg5vnn9jSPpu8TksVs/3kEMe/NN0eHbGgmh1CGzsekDp3LDouvdy4M1UygsWmHDxQMt87rEughSucTu/TXJYxn57GJsWManuujabwz4eL5+MX2sZm+c4m5PprG2JWjjbky+NilBLE0cfTPAsOE1DEhOz+pPjGm4Tf9tc0tEy6ej19sH5vp/ybxpr+2+eSq0cZcdjmhIgiVutnwZ4FhQgYBnQOzYtn1zhkgOwdmhfu584Yz9BCjc0aXvoYzHNk5QRgMfcNnnm0sJcJEW0rnSxPHzW1E51RSnmhLT/rlofPx7JwgDIbO9p+3/CTlCfVySucq9bhIjOicSsrVy+lJP3QOnSsXy653TuK7czCDcOv87vf0EKXziV367n4/qnP6XWxjhla4zul3sY0ZGjqXf0DnMsSy650z4JM0dA5MArfOm1LosXbt2qG33kIgEIoJqU88YlFIvXOSp6I5tcjoHACMwqnz3vsZ9IDOEQiFhdQnHrFIXyAV9c6BpcCt85Zb9IDOEQiFhdQnHrFIr3MS9c6BhcCp8572QnrQdc73VjhGl572wvE7260jJtzZbjWhpO/O+UanJKBz8tGjR5WVldnZ2enp6Tdu3Lh161ZhYWFpaWlfXx+78ZtHzRsAmBBunT8sZwR1FmAv4gvo3BoCOrcsrF3n3d3dxcXF+QUF9fUNra2tXT29t+/eK6muzb51KyEhoaGhgdEeOgcWhMgCqdRZYLIFUq0NUrluExCe5Lth1tEpCWvXeVZWjkZbUltf/6Clpbunp62jo/J23bVb+Sl5hRevpLi7uzPaQ+fAguDUORvqLMC5lBOpxSoNyUBZSP0BNTHWrvOLl5PTcm5py8rq6hs6OjsfdnbqHrSUVtfkllZcSstwcnJitIfOgQVhPp0fP35c6sHNNMo7+xtF2UNW3uiUo/NJPT5OERcfn3Q5WVNS2qjTtXV2dXR1Pezqanv4sLi8IvzAAS8vL0Z76BxYEOa72G7Q+aA1YTj7S70XM4qyhwydSw6vzumF0ejB+XI3ipi4uKCQkIORkVeup+ZoCsura+rqG4q12tOnT393+rSLiwujPVu90zQ3dA7MB5/ONXnX6EGdBRjz+QI6txKUPWToXHJMrPO4+PjDR4+FhoX5+Pp6eHoGBgYmJSXdyMzMzM6JPHxYODtnz4HOgazg03lhfioVYh5Uo7cvzE+Fzq0EZQ8ZOpccuWTnnDPp8/kMLbI7ANOHT+dFmnQqxOic3r5Ikw6dWwnKHjJ0LjlCOu/u7mKULeerc0ph2uycmkNfxG6G7BzMDHw61xbeoIKuc/YaDDqnt9cW3oDOzcAFe4IgCPsLZtvAFFCKzrmPLXQuOUZ0zg5hnUfHmvK7c77GIrtD58C08Om8pDiLCjE6p7cvKc6Czk1OmA1hf2EwzAY6Nz18xxY6lxwhnYuvc0pxNDraHNm5mC/LORsDYEL4dF6mzaFCjM7p7cu0OZTOL9iPJT2G/McmbPRMWRFmM/qotr3N2Gl0fB5hE1ZhaDfW7YJhmbxkxsBw9jfrkKFz8wGdyxAT6/xIdLRAdu7s7Mxoz2dfge/UBdYg3B2AacKn8/LSXCrE6Jzevrw0l56d086SF+zH3HbBfsxeF+xHjVURZkM3HzU96jebsAp6NzlCuc18Q4bOzQd0LkNM/Nx5UHCwQHa+ceNGRvsp38cuMgAwIXw6ryjLp0KMzuntK8ryjep8NAUlxtNPWp7KyFZlLvFxhHVukiFD5+YDOpchJn4r3KJFizZt2sSZnR84cCA2NpbRHjoHFgSfzqsqCqkQo3N6+6qKQuM6p6CyUn5pK0TnFNMYMnRuPqBzGWJinW/YsOH1119fuHChra3tmjVrfHx84uPj4+Li9u3bx/nLhs6BBcGn8+qqYirE6JzevrqqeKLOR80UZkN9kXzBnvpKePwiM23mRCxQ5+YaMnRuPqBzGSJxvXPoHFgQfDqvrS6hQozO6e1rq0sm3Nk+dpHZJixs7C4x2nVn+r1e7NkTr0fL3OrjbjPDkCdemJeL1JWhc75jC51LjsQ6L0teV5ZsX3R2RWnSqpqrTk35PvSov+Ha25wj4e4BQIdP57dry6kQ8xoZevvbteV4UM1KUPaQoXPJkVjnNRlO5OPdg20BTYVuZZfty66sf1B9iCSLDaF/kVt52U7C3QOADp/O629XUiFG5/T29bcroXMrQdlDhs4lR2qdpzsNPwobfhQ2PBA2PLCrr8lXo1aR1ZtHoy26/OJq8WsjCMJ8uwoAn84b6qvpQZ0FGPP5Ajq3EpQ9ZOhccqTXub5/11DfrqG+0KHe0KHeUI1a9azUXV/haTB6adIq8WuDzoFZQYFUE6Jst3Gi7CFD55Jjep1P6oH16jSnFz0hz7tDnneHPO8Ked4VolGrBovdnpW6G3SuvbDSyAD4Me24AODUORvqLMC5lI9kACwcqT+gJgY6JyMiIvRccL5OrjrV8Vln8NOHwU87gp90BD3pCNKoVX0FG59oNxl0XnRuhfhNQ+HArJhV51IPbqZR3tnfKMoesvJGB51P0PmrC92FdV513fFxW9Dj1sDB1sDBlsDBlkCNWtWe4zxY7DZctXmkarNGrTI+BqTmYEYw98V2q0J5Z3+jKHvIyhsddD6hUPqrC92FC6VXXXd89GDnwP2dA80B/bqAfl2ARq1qSl/Xk+/6otzzRblnfuLywZ57IjcNiwOzwqdzTd41elBnAcZ8voDOrQRlD1l5o4POR3XOKJTOp/PKaw59Tf599/x77/r3NPr1NPpp1KraKw6tWc6DWo/HZd7tJftzTy/j3XtjmHZowMrh03lhfio9qLMAYz5fQOdWgrKHrLzRQecTCqW/utBduFB6xVWHnjt+3Q07uup3tJRt1RV6aNSq4nP2uhvO3QWbBmoiSZLM+c5W1EgIgkSCDswJn86LNOn0oM4CjPl8AZ1bCcoesvJGB51PqKz66kJ34cqqFSlru+p8H9b6dFT7aNSq3NOqmydXVF52epDl2pLt2ll+kCTJrJNLjQ9jzOJ0nUPtwLTw6VxbeIMe1FlAW3hDWxj65ewNjAaMENB5+DvvhDeQ4e8QBEG8E95AkqPTxDvhoxOEY0rD+CSZ4khdmjK0J0mSeyZJkg3h77wTbvajxgPf2d8Kh2wOZv4wQueSY16dGy2UXn5lbUe1T3uld1v5do1adeWY7cUjttokp4ZUl4Y0l5vpLi6ZLpkJS4yMYeJ1daTpwEzw6bykOIse1FkAgUAoIKQ+8YhF4ufOy5PXtlVsbynd9kDrpVGrkg4vSQxfnJFgV5G8wRDF5x2yTtnz7v2YyBkKh8uBOeDTeZk2hx6Sn30QCIQJQ+oTj1gkfitcZap3RYpDc+EWnWaLRq2KD1l0wPv3Z775U1rc4rS4xZnf2umqkp8MdBhdD/vGN9wKB0wOn87LS3PpIfnZB4FAmDCkPvGIRWKdkyT5oOp80bmVtenOxedXZaeebm9vl3Z/AOCDT+cVZfnccdntN8Tnh8vyt7wxe8tlnjZl+Vzfnac40r+sTHEc+/rTMYVMcXRMIUmyIfwdxxRmA+Y0ydWAdzMzCuurViscsjmQ7DAq77tzi0N6nZMk+bi3qTYzuDjJcbCvVep9AYAXPp1XVRROJzh03hD+DjF+yqXOvw3h7ziGhzuGN5ATT7P0EzRtOsVx7H4lzpnk2A1TksA8+1vhkM2BdIcROpcc1DsHQCx8Oq+uKp5OcOucduocP/82hL9DjJ6tJ87kSrcYZ2LWTHnd5m2FQzYH0h1G6FxypK6ohnrnwHLg03ltdcl0Qljn9IeJSHpWRC0g2HNoCzhnkiRJkimOtHP5jCOgc2sZsjmQ7jBC55Ijtc6nXe/c6P1uhDFMNxqgcPh0fru2fDph/LtzcyBpnkoa/e7cHMhuyOZAssMInUuO9Dqffr1zgvZ8GtvThOCLZaBzIB4+ndffrpxOcL5Gxtx5pIRfIRtgn/2tcMjmQKrDCJ1LjmXX4hNE0wAAAsNJREFUO2fIm9Pc4mUPgDB8Om+or55O4CWvVoKyh6zs0VkECql3TrBeJsMQNuO6OnQOpoDIAqlTADq3BpQ9ZGWPziJQSL1z+gSnzqlpPq8DYBROnZuKZAAsHKk/oNaOEuqdMy62s3XOaXHcCgcmC1vnUu8RAACMYtn1zsmJLheZnTO6T3vEwFqAzgEAssWy653zfU3OnsnuxbcUAD6gcwCAbFFCvXO2nvnuesODamA6QOcAANmikHrnjGmB/Bu3woEpA50DAGSLZdc7Hx0D1yPm9H+FMeXggaKBzgEAskUJ9c7ZGTnJujNOuC8AYoDOAQCyRfoCqah3DiwF6BwAIFuk1zmJeufAQoDOAQCyBfXOARALdA4AkC1SV1RDvXNgOUDnAADZIrXOp13vnGJSt7yJfwCdryVuj7dCoHMAgGyRXufTr3duYJo6NzqTYW48vG6FQOcAANminHrnAs+UM55Yoy81amK+vwOgcysEOgcAyBZF1TsXv1TA5cKvmmH/TYCL7dYDdA4AkC1Kq3fOmZoz0nF2MwEr860HWCHQOQBAtiik3rnwHHYubtTcwqsikZ1bJdA5AEC2KKfeOX0Ouw0pIs/mu6jO2JbRPwuAUoHOAQCyRTn1ztlX0RlKpjejz2esjTHN1jnfUqB4oHMAgGxRWr1z9o/klLJz9kyBlUDqVgJ0DgCQLUqrd87+kWTl5WKyc5LkuLQuZltAwUDnAADZoqh655w/kuKyc0abKW8LKBjoHAAgW5RT75ya5tM5+0fh+92ErS/QBigV6BwAIFukL5CKeufAUoDOAQCyRXqdk6h3DiwE6BwAIFtQ7xwAsUDnAADZInVFNdQ7B5YDdA4AkC1S63za9c4570oTfoKcxB3pYEpA5wAA2SK9zk1V75xC+EE1kQ+kAcAGOgcAyBaLr3cuMEfgGXHoHEwB6BwAIFv+H3u8WbHs5UMRAAAAAElFTkSuQmCC" alt="" />

使用user/user1登录,成功!

[1] javax.sql.DataSource是一个用来定义数据库连接池的统一接口。当我们想调用任何实现了javax.sql.DataSource接口的连接池,只需要调用接口提供的getConnection()就可以获得连接池中的jdbc连接。javax.sql.DataSource可以屏蔽连接池的不同实现,我们使用的连接池即可能由第三方包单独提供,也可能是由j2ee容器统一管理提供的。

第 3 章 自定义数据库表结构

Spring Security默认提供的表结构太过简单了,其实就算默认提供的表结构很复杂,也无法满足所有企业内部对用户信息和权限信息管理的要求。基本上每个企业内部都有一套自己的用户信息管理结构,同时也会有一套对应的权限信息体系,如何让Spring Security在这些已有的数据结构之上运行呢?

3.1. 自定义表结构

假设我们实际使用的表结构如下所示:

-- 角色
CREATE TABLE role(
id BIGINT,
NAME VARCHAR(50),
descn VARCHAR(200)
);
ALTER TABLE role ADD CONSTRAINT pk_role PRIMARY KEY(id);
ALTER TABLE role MODIFY id BIGINT AUTO_INCREMENT; -- 用户
CREATE TABLE USER(
id BIGINT,
username VARCHAR(50),
PASSWORD VARCHAR(50),
STATUS INTEGER,
descn VARCHAR(200)
);
ALTER TABLE USER ADD CONSTRAINT pk_user PRIMARY KEY(id);
ALTER TABLE USER MODIFY id BIGINT AUTO_INCREMENT; -- 用户角色连接表
CREATE TABLE user_role(
user_id BIGINT,
role_id BIGINT
);
ALTER TABLE user_role ADD CONSTRAINT pk_user_role PRIMARY KEY(user_id, role_id);
ALTER TABLE user_role ADD CONSTRAINT fk_user_role_user FOREIGN KEY(user_id) REFERENCES USER(id);
ALTER TABLE user_role ADD CONSTRAINT fk_user_role_role FOREIGN KEY(role_id) REFERENCES role(id); INSERT INTO USER(id,username,PASSWORD,STATUS,descn) VALUES(1,'admin','admin',1,'管理员');
INSERT INTO USER(id,username,PASSWORD,STATUS,descn) VALUES(2,'user','user',1,'用户'); INSERT INTO role(id,NAME,descn) VALUES(1,'ROLE_ADMIN','管理员角色');
INSERT INTO role(id,NAME,descn) VALUES(2,'ROLE_USER','用户角色'); INSERT INTO user_role(user_id,role_id) VALUES(1,1);
INSERT INTO user_role(user_id,role_id) VALUES(1,2);
INSERT INTO user_role(user_id,role_id) VALUES(2,2);

上述共有三张表,其中user用户表,role角色表为保存用户权限数据的主表,user_role为关联表。user用户表,role角色表之间为多对多关系,就是说一个用户可以有多个角色。ER图如下所示:

aaarticlea/png;base64,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" alt="" />

3.3. 获得自定义用户权限信息

现在我们要在这样的数据结构基础上使用Spring Security,Spring Security所需要的数据只是为了处理两种情况,一是判断登录用户是否合法,二是判断登陆的用户是否有权限访问受保护的系统资源。

我们所要做的工作就是在现有数据结构的基础上,为Spring Security提供这两种数据。

3.3.1. 处理用户登陆

当用户登陆时,系统需要判断用户登录名是否存在,登陆密码是否正确,当前用户是否被禁用。我们使用下列SQL来提取这三个信息。

select username,password,status as enabled
from user
where username=?

3.3.2. 检验用户权限

用户登陆之后,系统需要获得该用户的所有权限,根据用户已被赋予的权限来判断哪些系统资源可以被用户访问,哪些资源不允许用户访问。

以下SQL就可以获得当前用户所拥有的权限

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=?

将这两条SQL语句配置到xml中,就可以让Spring Security从我们自定义的表结构中提取数据了。最终配置文件如下所示:

<authentication-provider>
<jdbc-user-service data-source-ref="dataSource"
1users-by-username-query="select username,password,status as enabled
from user
where username=?"
2authorities-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>

Spring Security教程系列(一)基础篇-1

users-by-username-query为根据用户名查找用户,系统通过传入的用户名查询当前用户的登录名,密码和是否被禁用这一状态。

Spring Security教程系列(一)基础篇-1

authorities-by-username-query为根据用户名查找权限,系统通过传入的用户名查询当前用户已被授予的所有权限。