springsecurity如何自定义登录页面

springsecurity默认为我们提供了一个登录页面,在登录页面,如果填入的用户名和密码不匹配后端设置,那么就会在当前页面弹出错误提示,这个页面很简单,而且是单调的。在实际开发中,有时候,为了让登录页面更加的美观和展现定制化的内容,我们需要自定义登录页面。

自定义登录页面需要改变的地方在以下几处:

1、security配置文件中增加form-login标签,并配置登录成功和失败的跳转页面。另外还需要配置csrf标签。

<http auto-config="true">
          <intercept-url pattern="/admin**" access="hasRole('ROLE_USER')" />
          <form-login
             login-page="/login"
             default-target-url="/admin"
             authentication-failure-url="/login?error"
             username-parameter="username"
             password-parameter="password"/>
            <logout logout-success-url="/login?logout"/>
            <!-- enable csrf protection -->
            <csrf/>
    </http> 

2、编写一个页面login.jsp,并在页面中指定几个主要的值(action,csrf)。

<div class="table">
	<c:if test="${not empty error}">
	       <div class="error">${error}</div>
	 </c:if>
        <c:if test="${not empty msg}">
	       <div class="error">${msg}</div>
	</c:if>
        <form action="<c:url value="login"/>" method="post">
	     <div class="list-item">
		   <label>UserName:</label>
		   <input type="text" name="username" placeholder="UserName"/>
	     </div>
	     <div class="list-item">
		   <label>Password:</label>
		   <input type="password" name="password" placeholder="Password"/>
	     </div>
	     <div class="list-item">
	           <input type="submit" value="Login"/>
	           <input type="reset" value="Reset"/>
	     </div>
	      <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>
	</form>
</div>

3、定义一个跳转到登录页面的方法。

@RequestMapping(value="/login",method=RequestMethod.GET)
public ModelAndView loginPage(@RequestParam(name="error",required=false)String error,
                              @RequestParam(name="logout",required=false)String logout){
	ModelAndView page = new ModelAndView();
	page.setViewName("login");
	page.addObject("title", "login");
	if(error != null){
		page.addObject("error", "Invalid username or password.");
	}
	if(logout != null){
		page.addObject("msg", "You've been logged out successfully.");
	}
	return page;
}

在登录成功跳转的主页中,如果需要退出,我们可以这样配置退出链接。

<c:url var="logoutUrl" value="logout"/>
<c:if test="${pageContext.request.userPrincipal.name != null}">
   welcome you,${pageContext.request.userPrincipal.name }
   <a href="javascript:formSubmit();">Logout</a>
</c:if>
		 
<!-- csrf for logout -->
<form action="${logoutUrl}" method="post" id="logoutForm">
     <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>
</form>
<script>
	 function formSubmit(){document.getElementById("logoutForm").submit();}
</script>

做了这些工作之后,再进行测试。

进入需要权限的页面,提示登录。


输入错误登录用户名或者密码提示Invalid username or password


登录成功跳转页面


点击退出登录,退出登录。


全部代码地址:https://github.com/yangfei2013/springsecuritydemo

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

luffy5459

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值