SpringSecurity实现自定义登录界面-阿里云开发者社区

开发者社区> 游客a74jvhcp7vclg> 正文

SpringSecurity实现自定义登录界面

简介: 前面通过入门案例介绍,我们发现在SpringSecurity中如果我们没有使用自定义的登录界面,那么SpringSecurity会给我们提供一个系统登录界面。但真实项目中我们一般都会使用自定义的登录界面,本文我们就来介绍下如何实现该操作。 注意:本文是在入门案例代码的基础上演示的!
+关注继续查看

前面通过入门案例介绍,我们发现在SpringSecurity中如果我们没有使用自定义的登录界面,那么SpringSecurity会给我们提供一个系统登录界面。但真实项目中我们一般都会使用自定义的登录界面,本文我们就来介绍下如何实现该操作。

注意:本文是在入门案例代码的基础上演示的!


一、页面准备


我们准备如下相关的jsp页面


1.login.jsp页面

<%--
  Created by IntelliJ IDEA.
  User: dengp
  Date: 2019/12/1
  Time: 20:40
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <h1>登录管理</h1>
    
    <form>
        账号:<input type="text" name="username"><br>
        密码:<input type="password" name="password"><br>
        <input type="submit" value="登录"><br>
    </form>
    <img src="img/a1.jpg">
</body>
</html>


2.home.jsp页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <h1>home界面</h1>
</body>
</html>


3.其他页面


20191205115333767.png


二、SpringSecurity相关配置


1.配置认证信息


配置登录和注销相关的信息

<security:http auto-config="true" use-expressions="true">
    <!--
        拦截资源
        pattern="/**" 拦截所有的资源
        access="hasanyrole('role1')" 表示只有role1这个角色可以访问资源
     -->
    <security:intercept-url pattern="/**" access="hasanyrole('role_user')"></security:intercept-url>
    <!--
        配置认证信息
     login-page="/login.jsp"  自定义的登录页面
     login-processing-url="/login" security中处理登录的请求
     default-target-url="/home.jsp" 默认的跳转地址
     authentication-failure-url="/failure.jsp" 登录失败的跳转地址
     -->
    <security:form-login login-page="/login.jsp"
                        login-processing-url="/login"
                         default-target-url="/home.jsp"
                         authentication-failure-url="/failure.jsp"
    />
    <!-- 配置退出的登录信息 -->
    <security:logout logout-url="/logout"
                     logout-success-url="/login.jsp"
    />
</security:http>


2.认证界面匿名访问


前面配置的

<security:intercept-url pattern="/**" access="hasanyrole('role_user')"></security:intercept-url>


会使登录界面不可访问,所以我们需要方法

20191205115425406.png


3.放过静态资源


同样的系统的 js css 等静态资源文件也会被对应的过滤器拦截,所以也需要方法


20191205115441801.png

4.登录测试


启动服务我们访问登录试试


20191205115458383.png

可以访问到,然后提交登录看看

注意表单设置

20191205115512188.png

然后访问出现了403错误

20191205115527419.png



三、关闭csrf拦截


 上面我们在账号和角色都正确的情况下,登录后出现了 403错误,原因是因为 csrf过滤器拦截了,那为什么系统提供的登录界面没问题呢?原因是如下

20191205115545678.png

在系统提供的登录表单中隐藏的有csrf相关的信息。这时我们可以关闭csrf过滤器,来实现登录工作

20191205115557861.png

重启服务再测试就可以了

20191205115612540.png


四、csrf防护


 上面我们通过关闭csrf过滤器实现了认证功能,但是系统将面临csrf攻击的风险,所以我们需要放开服务,同时也要能够完成认证。首先我们来看下CsrfFilter的源码


1.CsrfFilter源码查看


20191205115635547.png


this.requireCsrfProtectionMatcher.matches(request)方法


20191205115649461.png

通过 GET HEAD TRACE OPTIONS 提交的数据不会 csrf 验证


2.放开过滤器


前面关闭的我们需要放开

20191205115709705.png


3.页面动态token


导入security标签


20191205115730717.png

security:csrfInput/ 在表单中使用,作用和下面的一致

20191205115745639.png


security:csrfMetaTags/:ajax方式提交的时候使用


五、注销功能


在home.jsp中添加注销链接


20191205115802666.png

点击后出现了404错误原因是:自定义的注销功能必须通过post方式提交才行,所以如下



20191205115820283.png20191205115825776.png



出现这个原因是 csrf的原因,加标签即可


20191205115838640.png


搞定~


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
SpringBoot前后分离项目实现自定义登录拦截
版权声明:本文首发 http://asing1elife.com ,转载请注明出处。 https://blog.csdn.net/asing1elife/article/details/82696896 ...
1730 0
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
9497 0
(十三)Java springcloud B2B2C o2o多用户商城 springcloud架构 - SSO单点登录之OAuth2.0 根据token获取用户信息(4)
根据框架中OAuth2.0的使用总结,画了SSO单点登录之OAuth2.0 登出流程,今天我们看一下根据用户token获取yoghurt信息的流程:完整项目的源码来源 技术支持2147775633
1437 0
你的开发利器Spring自定义注解
自定义注解在开发中是一把利器,经常会被使用到。但是对于自定义注解,只是停留在表面的使用,没有做到知其然,而知其所以然。所以这篇文章就是来了解自定义注解这把开发利器的
1881 0
【spring boot logback】日志颜色渲染,使用logback-spring.xml自定义的配置文件后,日志没有颜色了
接着spring boot日志logback解析之后,发现使用logback-spring.xml自定义的配置文件后,日志没有颜色了   怎么办? 官网处理日志链接:https://logback.qos.
4559 0
Spring MVC 中自定义视图 @Component 及 配置 多个视图解析器 Excel视图
首先我们建立一个自己的View实现View接口。要注意在类上面加上@Component的注解,因为看BeanNameViewResolver的源码知道,是直接从ioc容器里面拿的根据名字拿的视图,所以我们得把我们自己写的视图放到容器里面。 HelloView.java package com.hust.springmvc.views; import java.uti
2058 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13186 0
Spring Security 自定义认证
Spring Security 自定义认证
152 0
+关注
游客a74jvhcp7vclg
10余年开发架构经验,同时乐于技术分享!
332
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载