springsecurity自定义登录界面

第 4 章 自定义登陆页面

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

4.1. 实现自定义登陆页面

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

+ ch04/
  + src/
    + main/
      + resources/
        * applicationContext.xml
      + webapp/
        + WEB-INF/
          * web.xml
        * admin.jsp
        * index.jsp
        * login.jsp
    + test/
      + resources/
  * pom.xml
        

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"2
                authentication-failure-url="/login.jsp?error=true"3
                default-target-url="/" />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页面的主要代码。

<div class="error ${param.error == true ? '' : 'hide'}">
  登陆失败<br>
  ${sessionScope['SPRING_SECURITY_LAST_EXCEPTION'].message}
</div>
<form action="${pageContext.request.contextPath}/j_spring_security_check1" style="width:260px;text-align:center;">
  <fieldset>
    <legend>登陆</legend>
    用户: <input type="text" name="j_username2" style="width:150px;" value="${sessionScope['SPRING_SECURITY_LAST_USERNAME']}"/><br />
    密码: <input type="password" name="j_password3" style="width:150px;" /><br />
    <input type="checkbox" name="_spring_security_remember_me4" />两周之内不必登陆<br />
    <input type="submit" value="登陆"/>
    <input type="reset" value="重置"/>
  </fieldset>
</form>
        

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所需的基本元素,这些参数名称都采用了Spring Security中默认的配置值,如果有特殊需要还可以通过配置文件进行修改。

4.4. 测试一下

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

进入登录页面

图 4.1. 进入登录页面


用户登陆失败

图 4.2. 用户登陆失败


实例见ch004。



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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Security中,可以通过配置来自定义登录页面。需要进行以下几个步骤: 1. 创建自定义的登录页面。可以在项目中创建一个JSP或HTML文件,用于显示登录表单。 2. 在Spring Security的配置文件中指定自定义的登录页面。可以使用`<security:form-login>`元素来配置登录页面的路径,例如:`<security:form-login login-page="/login.jsp" />`。其中,`login-page`属性指定了登录页面的路径。 3. 确保自定义的登录页面可以被匿名访问。可以使用`<security:intercept-url>`元素来配置URL的访问权限,例如:`<security:intercept-url pattern="/login.jsp" access="permitAll" />`。其中,`pattern`属性指定了匹配的URL路径,`access`属性指定了访问该URL的权限。 通过以上配置,您可以实现Spring Security自定义登录界面。请注意,在配置文件中的其他部分可能还有其他相关配置,比如配置认证信息、配置退出登录等。详细配置可以参考引用和引用中的示例代码和解释。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [SpringSecurity实现自定义登录界面](https://blog.csdn.net/qq_38526573/article/details/103402060)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值