springsecurity基于数据库验证用户

Posted 何甜甜在吗

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springsecurity基于数据库验证用户相关的知识,希望对你有一定的参考价值。

之前的springsecurity程序都是将数据存放在内存中的,通过

1 <security:user-service>
2             <security:user name="user" password="user" authorities="ROLE_USER"/>
3             <security:user name="admin" password="admin" authorities="ROLE_USER, ROLE_ADMIN"/>
4          </security:user-service>

user-service指定用户信息,例如name,password和权限

但是这样的验证在开发中是不科学的,所以我们要连接数据库,通过匹配数据库中的信息判断用户是否登陆

 

首先我们需要添加依赖,需要继续添加的依赖有spring-jdbc,spring-core,spring-web,spring-webmvc,mysql-connector-java

添加完依赖后我们需要加入数据库的配置文件

在spring-security配置文件中配置datasource

jdbc-user-service 元素,通过该元素我们可以定义一个从数据库获取 UserDetails 的 UserDetailsService, dataSource 是对应数据源配置的 bean 引用

完整的spring-security.xml配置文件:

 1 <beans xmlns="http://www.springframework.org/schema/beans"
 2        xmlns:security="http://www.springframework.org/schema/security"
 3        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4        xmlns:context="http://www.springframework.org/schema/context"
 5        xsi:schemaLocation="http://www.springframework.org/schema/beans
 6           http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
 7           http://www.springframework.org/schema/security
 8           http://www.springframework.org/schema/security/spring-security-3.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
 9     <!--加载数据库的配置文件-->
10     <context:property-placeholder location="classpath:db.properties"/>
11      <!--配置数据源-->
12     <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
13         <property name="driverClassName" value="${jdbc.driverClass}"/>
14         <property name="password" value="${jdbc.password}"/>
15         <property name="url" value="${jdbc.jdbcUrl}"/>
16         <property name="username" value="${jdbc.user}"/>
17     </bean>
18         <!--
19         自定义表单,通过form-login标签
20         authentication-failure-url指定登陆失败以后应该跳转的页面
21         default-target-url指定登陆成功以后跳转的页面,默认的是index.jsp页面
22         -->
23     <security:http auto-config="true">
24         <security:form-login login-page="/login.jsp"
25                              default-target-url="/successful.jsp"
26                              login-processing-url="/login.do"
27                              authentication-failure-url="/login_failure.jsp"
28                              always-use-default-target="true"
29                              username-parameter="username"
30                              password-parameter="password"
31         />
32         <!-- 表示匿名用户可以访问 -->
33         <security:intercept-url pattern="/login*.jsp*"
34                                 access="IS_AUTHENTICATED_ANONYMOUSLY" />
35         <security:intercept-url pattern="/**" access="ROLE_USER" />
36     </security:http>
37 
38 
39     <security:authentication-manager>
40         <security:authentication-provider>
41             <security:jdbc-user-service data-source-ref="dataSource"/>
42         </security:authentication-provider>
43     </security:authentication-manager>
44 
45 </beans>

 

默认情况下 jdbc-user-service 将使用 SQL 语句 “select username, password, enabled from users where username = ?” 来获取用户信息;使用 SQL 语句 “select username, authority from authorities where username = ?” 来获取用户对应的权限;

若数据库表名不是系统默认的,我们可以通过属性 users-by-username-query 来指定查询用户信息的时候是从自定义用户信息表中查询,通过authorities-by-username-query来查询用户权限

以上是关于springsecurity基于数据库验证用户的主要内容,如果未能解决你的问题,请参考以下文章

SpringSecurity03 基于内存验证

Spring Security---验证码详解

springboot集成spring security实现restful风格的登录认证 附代码

SpringSecurity实现前后端分离项目的登录认证

基于 Spring Security 令牌的身份验证

使用SpringSecurity3用户验证(异常信息,验证码)