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

第 4 章 自定义登陆页面

Spring Security虽然默认提供了一个登陆页面,但是这个页面实在太简陋了,只有在快速演示时才有可能它做系统的登陆页面,实际开发时无论是从美观还是实用性角度考虑,我们都必须实现自定义的登录页面。

4.1. 实现自定义登陆页面

自己实现一个login.jsp,放在src/main/webapp/目录下。

4.2. 修改配置文件

在xml中的http标签中添加一个form-login标签。

<http auto-config="true">
<intercept-url pattern="/login.jsp" access="IS_AUTHENTICATED_ANONYMOUSLY" />1
<intercept-url pattern="/admin.jsp" access="ROLE_ADMIN" />
<intercept-url pattern="/**" access="ROLE_USER" />
<form-login login-page="/login.jsp" 2authentication-failure-url="/login.jsp?error=true" 3default-target-url="/index.jsp" />4
</http> 

1

让没登陆的用户也可以访问login.jsp。[2]

这是因为配置文件中的“/**”配置,要求用户访问任意一个系统资源时,必须拥有ROLE_USER角色,/login.jsp也不例外,如果我们不为/login.jsp单独配置访问权限,会造成用户连登陆的权限都没有,这是不正确的。
 
2
 login-page表示用户登陆时显示我们自定义的login.jsp。

这时我们访问系统显示的登陆页面将是我们上面创建的login.jsp。
 
3
 authentication-failure-url表示用户登陆失败时,跳转到哪个页面。

当用户输入的登录名和密码不正确时,系统将再次跳转到/login.jsp,并添加一个error=true参数作为登陆失败的标示。
 
4
 default-target-url表示登陆成功时,跳转到哪个页面。[3]

4.3. 登陆页面中的参数配置

以下是我们创建的login.jsp页面的主要代码。

<body>

<div class="error  ${param.error == true ? ‘‘ : ‘hide‘}">
  ${sessionScope[‘SPRING_SECURITY_LAST_EXCEPTION‘].message}
</div>
<form action="${pageContext.request.contextPath}/j_spring_security_check" method="post">
  <fieldset>
    <legend>登陆</legend>
    用户: <input type="text" name="j_username" style="width:150px;" value="${sessionScope[‘SPRING_SECURITY_LAST_USERNAME‘]}"/><br />
    密码: <input type="password" name="j_password" style="width:150px;" /><br />
    <input type="checkbox" name="_spring_security_remember_me" />两周之内不必登陆<br />
    <input type="submit" value="登陆"/>
    <input type="reset" value="重置"/>
  </fieldset>
</form>
</body>

1
 /j_spring_security_check,提交登陆信息的URL地址。

自定义form时,要把form的action设置为/j_spring_security_check。注意这里要使用绝对路径,避免登陆页面存放的页面可能带来的问题。[4]
 
2
 j_username,输入登陆名的参数名称。
 
3
 j_password,输入密码的参数名称
 
4
 _spring_security_remember_me,选择是否允许自动登录的参数名称。

可以直接把这个参数设置为一个checkbox,无需设置value,Spring Security会自行判断它是否被选中。
 
?????????? _spring_security_remember_me功能好像用不了,待续

4.4. 测试一下

经过以上配置,我们终于使用了一个自己创建的登陆页面替换了原来Spring Security默认提供的登录页面了。我们不仅仅是做个样子,而是实际配置了各个Spring Security所需的参数,真正将自定义登陆页面与Spring Security紧紧的整合在了一起。以下是使用自定义登陆页面实际运行时的截图。

登陆失败

登陆成功

[2] 有关匿名用户的知识,我们会在之后的章节中进行讲解。

[3] 登陆成功后跳转策略的知识,我们会在之后的章节中进行讲解。

[4] 关于绝对路径和相对路径的详细讨论,请参考http://www.family168.com/tutorial/jsp/html/jsp-ch-03.html#jsp-ch-03-04-01



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

时间: 2024-08-10 15:10:11

Spring Security教程系列(一)基础篇-2的相关文章

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

第 1 章 一个简单的HelloWorld 第 1 章 一个简单的HelloWorld Spring Security中可以使用Acegi-1.x时代的普通配置方式,也可以使用从2.0时代才出现的命名空间配置方式,实际上这两者实现的功能是完全一致的,只是新的命名空间配置方式可以把原来需要几百行的配置压缩成短短的几十行.我们的教程中都会使用命名空间的方式进行配置,凡事务求最简. 1.1. 配置过滤器 为了在项目中使用Spring Security控制权限,首先要在web.xml中配置过滤器,这样我

Spring Security教程(三):自定义表结构

在上一篇博客中讲解了用Spring Security自带的默认数据库存储用户和权限的数据,但是Spring Security默认提供的表结构太过简单了,其实就算默认提供的表结构很复杂,也不一定能满足项目对用户信息和权限信息管理的要求.那么接下来就讲解如何自定义数据库实现对用户信息和权限信息的管理. 一.自定义表结构 这里还是用的mysql数据库,所以pom.xml文件都不用修改.这里只要新建三张表即可,user表.role表.user_role表.其中user用户表,role角色表为保存用户权限

[转载]WPF入门教程系列一——基础

一. 前言   最近在学习WPF,学习WPF首先上的是微软的MSDN,然后再搜索了一下网络有关WPF的学习资料.为了温故而知新把学习过程记录下来,以备后查.这篇主要讲WPF的开发基础,介绍了如何使用Visual Studio 2013创建一个WPF应用程序. 首先说一下学习WPF的基础知识: 1) 要会一门.NET所支持的编程语言.例如C#. 2) 会一点“标准通用标记语言”:WPF窗体程序使用的XAML语言,也属于“标准通用标记语言”的一个分支.如果以前接触过XML.HTML.XHTML.AS

Spring Security教程(八):用户认证流程源码详解

本篇文章主要围绕下面几个问题来深入源码: 用户认证流程 认证结果如何在多个请求之间共享 获取认证用户信息 一.用户认证流程 上节中提到Spring Security核心就是一系列的过滤器链,当一个请求来的时候,首先要通过过滤器链的校验,校验通过之后才会访问用户各种信息. 这里要说明的是在过滤器的最前端有一个SecurityContextPersistenceFilter,当请求进来和返回的时候都会经过这个过滤器,它主要存放用户的认证信息.这里先简单提一下,后面会详解. 当用户发送登录请求的时候(

Windows Azure系列 -《基础篇》- 创建虚拟网络

如何在Windows Azure中创建虚拟网络,以构建云环境中的虚拟局域网: 1.登陆Windows Azure平台,点击侧边栏网络按钮,在中间点击"创建虚拟网络". 2.在接下来的配置页面,填写虚拟网络的名称.选择地理外置和地缘组(如果已有),没有则选择创建新的地缘组. 3.接下来填写DNS服务器地址(没有则留空) 4.规划和配置IP网络,选择适用的地址空间. 5.最后点击确认按钮完成. Windows Azure系列 -<基础篇>- 创建虚拟网络,布布扣,bubuko.

Windows Azure系列 -《基础篇》- 如何创建虚拟机

首先,使用自己的windows azure账号登陆管理平台manage.windowsazure.cn,找到并点击"虚拟机"标签,即可看到目前云平台中你所拥有的虚机实例,在我的环境中现在没有任何的虚机,所以我们可以通过点击图示的新建按钮进行选择或直接点击"创建虚拟机"进行创建: 点击"创建虚拟机",在DNS名称位置填写所建虚机的主机名,并选择映像和虚机大小(可选单核至8核,内存从768M至56G),这里说明一下,处于用户名不可以设置为常用的adm

sql系列(基础篇)-第二章 约束和排序数据

更好的看↑代码点击VIEW PLAN 第二章 约束和排序数据 1. 在 emp 表中选择工资介于 1500 到 2500 的员工的信息: 注意:使用 between 下边界 and 上边界时,条件包括边界值: [email protected]>l 1 select * from emp 2* where sal between 1500 and 2500 [email protected]>/ EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ----

sql系列(基础篇)-前言 课前补充知识

前言 课前补充知识 Number(p,s) Number(p,s):数字类型,p 表示数字的有效长度(从数字的左边第 1 位不为 0 的开始算起,直到最右边的长度:取值范围 0~38 位),s 表示数字的精度(即小数点右边的位数,取值范围-84~127 位): Varchar2(s) Varchar2(s):可变长的字符类型,s 表示字符串的长度,取值范围 1~4000 位: Char(s) Char(s):定长的字符类型,s 表示字符串的长度,取值范围 1~2000 位: Date Date:

sql系列(基础篇)-第一章 关于sysdate

第一章 基本的SQL语句 1. 查询数据库系统时间,常以服务器默认的格式进行显示(根据数据库的字符集而定): 注意:dual 为数据库中的虚表,隶属于管理员 sys 用户,但所有的用户都可以访问:无实际意义,仅充当select 语句的结构(用 select取系统信息.临时结果等时,以 dual 充当语句结构): [email protected]>select sysdate from dual; SYSDATE --------- 18-JUN-14 1.1 修改系统时间的显示格式:(sess