在之前的博客使用SpringMVC创建Web工程并使用SpringSecurity进行权限控制的详细配置方法 中,我们描述了如何配置一个基于SpringMVC、SpringSecurity框架的网站系统。在这篇博客中,我们将继续描述如何使用Spring Security进行登录验证。
总结一下Spring Security的登录验证关键步骤:
1、在数据库中建好三张表,即users、authorities和persistent_logins三个。注意字段的定义,不能少,可以多,名字必须按规定来。
2、在Spring Security的配置文件中,配置好登录跳转的页面,登录处理的页面和加密情况。
3、在前台的jsp页面中,登录的字段必须和后台users表中的一致,一般都是username和password。
4、注册页面必须自己写,注册的处理也要自己写。
一、创建数据表
使用Spring Security进行登录验证,需要我们在数据库中建好相应的表,并且字段要和Spring Security内置的字段一致。主要有3张表需要建立。一是users表,包含用户名和密码以及用户状态的表;第二个是authorities表,表明该用户角色的,方便做角色控制,比如是ROLE_USER还是ROLE_ADMIN(比如admin页面可能需要用户的ROLE_ADMIN权限,而ROLE_USER权限无法登录这个管理页面);最后一个是persistent_logins表,是登录状态的记录表,主要用来提供支持“记住我”功能的。三张表的创建语句如下:
#create users table CREATE TABLE `users` ( `username` varchar(100) NOT NULL, `password` varchar(100) NOT NULL, `enabled` tinyint(1) NOT NULL DEFAULT '1', UNIQUE KEY `account` (`username`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; #create authorities table CREATE TABLE `authorities` ( `username` varchar(50) NOT NULL, `authority` varchar(50) DEFAULT NULL, PRIMARY KEY (`username`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; #create persistent_logins table CREATE TABLE `persistent_logins` ( `username` varchar(64) NOT NULL, `series` varchar(64) NOT NULL, `token` varchar(64) NOT NULL, `last_used` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`series`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
记住,这三张表字段一定要至少包含以上字段。这样Spring Security才能识别。但是,我们也可以额外添加一些字段,比如在users中添加uid等。
二、配置Spring Security的权限控制
配置Spring Security的控制信息就是配置哪些页面需要登录的用户才能访问,登录的页面是那一个,登陆成功跳转到哪里等。以如下配置为例:所有的js等在resources文件夹下的内容都不需要经过过滤器,因为这些都是静态资源。而首页(/),登录页(/signin)、注册页(/register)等不需要用户登录,但是需要经过过滤器(因为我们可能需要获取未登录用户的一些信息)。两种配置方式如下所示。最后我们使用
这里有两个Tab页代码,一个是登录Tab一个是注册Tab。主要是登录的Tab要和Spring Security一致,即登录的处理应当是login,即action="login",用户名的ID和name应该是username,而密码的应该是password,即提交给登录验证的两个参数应当是username和password,处理的请求页是login。
四、创建注册后台,定义登录处理
当登录注册页面做好之后,需要定义一下处理请求,即跳转的定义。然后只要写注册的后台就行了。注意一点,Spring Security的注册处理需要自己写个后台。用户提交注册后,我们需要把用户名和密码插入到数据库中,又一点注意了,由于我们之前配置了密码的加密,所以用户注册在插入数据库之前需要加密,否则后面无法验证通过。在注册用户的时候,我们需要更新users表的信息和authorities表信息,前者插入用户名和密码,并使得enabled=1(这个字段表示用户是否正常,=0的话,状态就是锁定的)。在authorities中要写入用户对应的角色(权限)。用户注册的时候密码加密的关键代码如下:
//插入users表的语句
String addUser = "insert into users(username,password) values(?,?)";
//对密码参数进行加密
String pwd = SpringSecurityUtil.encode(password);
Object[] param = {email, pwd};
//插入authorities表的语句
String addAuthority = "insert into authorities(username,authority) values(?,'ROLE_USER')";
Object[] authorityParam = {email};
int rows = 0;
try {
rows = MyQueryRunnerUtil.getQueryRunner().update(addUser, param);
rows += MyQueryRunnerUtil.getQueryRunner().update(addAuthority, authorityParam);
} catch (SQLException e) {
e.printStackTrace();
}
加密的代码如下:
public static String encode(String rawPassword) {
// 调用spring security的BCrypt加密
BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
String encoderPassword = encoder.encode(rawPassword);
return encoderPassword;
}
这样,用户就可以注册了。注册好了就可以使用登录功能了。
总结一下Spring Security的登录验证关键步骤:
1、在数据库中建好三张表,即users、authorities和persistent_logins三个。注意字段的定义,不能少,可以多,名字必须按规定来。
2、在Spring Security的配置文件中,配置好登录跳转的页面,登录处理的页面和加密情况。
3、在前台的jsp页面中,登录的字段必须和后台users表中的一致,一般都是username和password。
4、注册页面必须自己写,注册的处理也要自己写。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。



