Spring Security登录

1.简介

本文将重点介绍使用Spring Security登录 。 我们将在前面的简单Spring MVC示例的基础上构建,因为这是设置Web应用程序和登录机制的必要部分。

2. Maven依赖

要将Maven依赖项添加到项目中,请参阅Spring Security with Maven文章 。 标准的spring-security-webspring-security-config都是必需的。

3.

web.xml中的Spring Security配置很简单–仅向标准Spring MVC web.xml中添加了一个额外的过滤器:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"><display-name>Spring Secured Application</display-name><!-- Spring MVC --><servlet><servlet-name>mvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>mvc</servlet-name><url-pattern>/</url-pattern></servlet-mapping><context-param><param-name>contextClass</param-name><param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value></context-param><context-param><param-name>contextConfigLocation</param-name><param-value>org.baeldung.spring.web.config</param-value></context-param><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><!-- Spring Security --><filter><filter-name>springSecurityFilterChain</filter-name><filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class></filter><filter-mapping><filter-name>springSecurityFilterChain</filter-name><url-pattern>/*</url-pattern></filter-mapping></web-app>

过滤器-DelegatingFilterProxy-简单地委派给Spring托管的bean – FilterChainProxy-它本身可以从完整的Spring bean生命周期管理等中受益。

2. Spring Security配置

Spring配置大部分是用Java编写的,但是Spring Security配置尚不支持完整的Java,并且在大多数情况下仍需要为XML。 目前正在努力为Spring Security添加基于Java的配置 ,但这还不成熟。

整个项目使用的是Java配置,因此需要通过Java @Configuration类导入XML配置文件:

@Configuration
@ImportResource({ "classpath:webSecurityConfig.xml" })
public class SecSecurityConfig {public SecSecurityConfig() {super();}
}

Spring Security XML配置– webSecurityConfig.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:beans="http://www.springframework.org/schema/beans"xsi:schemaLocation="http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.1.xsdhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd"><http use-expressions="true"><intercept-url pattern="/login*" access="isAnonymous()" /><intercept-url pattern="/**" access="isAuthenticated()"/><form-login login-page='/login.html' default-target-url="/homepage.html" authentication-failure-url="/login.html?error=true" /><logout logout-success-url="/login.html" /></http><authentication-manager><authentication-provider><user-service><user name="user1" password="user1Pass" authorities="ROLE_USER" /></user-service></authentication-provider></authentication-manager>
</beans:beans>

2.1。 <intercept-url>

我们允许对/ login进行匿名访问,以便用户可以进行身份​​验证。 我们也在确保其他一切。

请注意, <intercept-url>元素的顺序很重要-首先需要制定更具体的规则,然后是更通用的规则。

2.2。 <表单登录>

  • 登录页面自定义登录页面
  • default-target-url-成功登录后的登录页面
  • authentication-failure-url –登录失败后的登录页面

2.3。 <身份验证管理器>

身份验证提供程序由简单的内存实现(特别是InMemoryUserDetailsManager )支持,以纯文本配置。 它仅在Spring 3.1及更高版本中存在,并且在尚不需要完全持久性机制的情况下,可用于快速原型制作。

3.登录表单

登录表单页面将使用简单的机制向Spring MVC注册,该机制将视图名称映射到URL ,而无需在两者之间使用显式控制器:

registry.addViewController("/login.html");

当然,这对应于login.jsp

<html>
<head></head>
<body><h1>Login</h1><form name='f' action="j_spring_security_check" method='POST'><table><tr><td>User:</td><td><input type='text' name='j_username' value=''></td></tr><tr><td>Password:</td><td><input type='password' name='j_password' /></td></tr><tr><td><input name="submit" type="submit" value="submit" /></td></tr></table></form>
</body>
</html>

Spring登录表单具有以下相关工件:

  • j_spring_security_check –表单在其中张贴以触发身份验证过程的URL
  • j_username –用户名
  • j_password –密码

4.进一步配置Spring登录

当我们在上面介绍了Spring Security XML Configuration时,我们简要讨论了登录机制的一些配置–现在让我们详细介绍一下。

覆盖Spring Security中大多数默认设置的原因之一是隐藏了应用程序受Spring Security保护的事实,并最大程度地减少了潜在的攻击者对应用程序的了解。

完全配置后, <form-login>元素如下所示:

<form-login login-page='/login.html' login-processing-url="/perform_login" default-target-url="/homepage.html"authentication-failure-url="/login.html?error=true" always-use-default-target="true"/>

4.1。 登录页面

通过登录页面属性o n <form-login>配置自定义登录页面:

login-page='/login.html'

如果未指定,则使用默认URL – spring_security_login –并且Spring Security将在该URL生成一个非常基本的登录表单。

4.2。 登录的POST URL

Spring Login将在其上触发触发身份验证过程的默认URL是/ j_spring_security_check

可以通过<form-login>上的login-processing-url属性覆盖此URL:

login-processing-url="/perform_login"

覆盖此默认URL的一个很好的理由是隐藏一个事实,即该应用程序实际上已通过Spring Security进行了保护-该信息不应在外部使用。

4.3。 成功登录页面

成功的登录过程之后,用户将被重定向到页面–默认情况下,页面是Web应用程序的根目录。

这可以通过<form-login>上的default-target-url属性来覆盖:

default-target-url="/homepage.html"

如果always-use-default-target设置为true,则始终将用户重定向到此页面。 如果该属性设置为false,则在升级用户进行身份验证之前,该用户将被重定向到他们要访问的上一页。

4.4。 登陆页面失败

与登录页面相同,登录失败页面默认由Spring Security在/ spring_security_login?login_error生成。

这可以通过<form-login>上的authentication-failure-url属性来覆盖:

authentication-failure-url="/login.html?error=true"

5.结论

在这个Spring登录示例中,我们配置了一个简单的身份验证过程–我们讨论了Spring Security登录表单,Security XML配置以及名称空间中可用的一些更高级的自定义。

可以在github项目中找到此Spring Login教程的实现–这是一个基于Eclipse的项目,因此应易于导入和运行。

当项目在本地运行时,可以在以下位置访问示例html:

  • http:// localhost:8080 / spring-security-login / login.html

参考: Spring安全表单,从我们的JCG合作伙伴 Eugen Paraschiv 登录到baeldung博客。

翻译自: https://www.javacodegeeks.com/2013/05/spring-security-login.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/368809.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php运城,运城php培训

作用域&#xff1a;全局的request恳求   描绘&#xff1a;经过在Global中完成Application_Error办法&#xff0c;来到达侦听未经处置的异常   详细代码如下&#xff1a;sudo dtrace -qFn pid$target:Finding?Ray:Finding?Ray:r{ printf("%s\n", probefunc); } …

sql语句使用、说明及技巧

一、基础 1、说明&#xff1a;创建数据库CREATE DATABASE database-name 2、说明&#xff1a;删除数据库drop database dbname3、说明&#xff1a;备份sql server--- 创建 备份数据的 deviceUSE masterEXEC sp_addumpdevice disk, testBack, c:\mssql7backup\MyNwind_1.dat--- …

利用爬虫模拟网页微信wechat

1.登录页面&#xff0c;显示二维码 当我们打开网页微信时&#xff0c;会看到一个用于扫码登录的二维码&#xff0c;所以我们要模拟该页面给我们的页面也弄一个二维码 通过查看网页代码我们发现&#xff0c;这个二维码的标签为 这个src属性的最后一段每次访问都是不同的&#xf…

Bootstrap分页

前面的话 分页导航几乎在每个网站都可见&#xff0c;好的分页能给用户带来好的用户体验。本文将详细介绍Bootstrap分页 概述 在Bootstrap框架中提供了两种分页导航&#xff1a; ☑ 带页码的分页导航 ☑ 带翻页的分页导航 页码分页 带页码的分页导航&#xff0c;可能是最常见…

php 查询and or,php – SQL查询多个AND和OR不起作用

我有一个包含由双管分隔的值的单元格.我试图用以下内容搜索这个单元格的内容,(其中10是要搜索的数字)&#xff1f;,10&#xff05;,&#xff1f;&#xff05;和10我的查询似乎只返回10.没有其他变化.有人可以告诉我为什么它不起作用&#xff1f;提前谢谢了. (您在下面看到的SQL…

[codevs1213]解的个数 二分 + exgcd

题目← 扩欧&#xff0c;求不定方程解的个数 我们已经知道通解x0 x - (b/gcd(a,b))t&#xff0c;那只要知道有多少个t使x在题目给定的范围中就行了 但还有y 怎么办&#xff1f;求交集&#xff01; 分别二分确定在x取值范围内合法的t的范围和在y取值范围内合法的t的范围 然后交…

爬取饿了么商铺信息

分析&#xff1a; 当我们访问https://www.ele.me/home/时&#xff0c;看看我们得到了什么 1.png我们发现所有的城市名称和他的经纬度&#xff0c;还有一个风流的男子 然后随机输入一些东西看看&#xff0c;进入某个地区看一看 在新的界面里我们看到了这样一条url: https://main…

html中的锚点

一、页面内跳转的锚点设置 页面内的跳转需要两步&#xff1a; 方法一&#xff1a; ①&#xff1a;设置一个锚点链接<a href"#miao">去找喵星人</a>&#xff1b;&#xff08;注意&#xff1a;href属性的属性值最前面要加#&#xff09; ②&#xff1a;在页…

linux基本命令du,Linux常用操作命令汇总

你还在为不知道Linux常用操作命令汇总而不知所措么?下面来是学习啦小编为大家收集的Linux常用操作命令汇总&#xff0c;欢迎大家阅读&#xff1a;Linux常用操作命令汇总1.ls 命令ls以默认方式显示当前目录文件列表服务器教程ls -a显示所有文件包括隐藏文件ls -l显示文件属性&a…

Maven部署到Nexus

1.概述 在上一篇文章中 &#xff0c;我讨论了Maven项目如何在本地安装尚未部署在Maven Central&#xff08;或任何其他大型且公共托管的存储库&#xff09;上的第三方jar。 该解决方案仅适用于小型项目&#xff0c;在这些项目中安装&#xff0c;运行和维护完整的Nexus服务器可能…

后处理效果栈

Unity官方的Github实现&#xff1a;Post Processing Stack Post-processing is the process of applying full-screen filters and effects to a camera’s image buffer before it is displayed to screen. It can drastically improve the visuals of your product with litt…

【Java IO流】浅谈io,bio,nio,aio

本文转载自&#xff1a;http://www.cnblogs.com/doit8791/p/4951591.html1、同步异步、阻塞非阻塞概念 同步和异步是针对应用程序和内核的交互而言的。 阻塞和非阻塞是针对于进程在访问数据的时候&#xff0c;根据IO操作的就绪状态来采取的不同方式&#xff0c;说白了是一种读…

linux 安装tcl命令,TCL/TK Linux下安装 | 勤奋的小青蛙

原创文章&#xff0c;转载请注明&#xff1a; 转载自勤奋的小青蛙本文链接地址: TCL/TK Linux下安装在Linux下安装TCL/TK&#xff0c;可以有编译源代码的方式安装&#xff0c;也可以有直接通过二进制压缩包进行解压缩安装&#xff0c;本文采用比较快捷的方式&#xff0c;用二进…

安全性中的Spring AOP –通过方面控制UI组件的创建

以下文章将显示在我参与的一个项目中&#xff0c;我们如何使用Spring的AOP来介绍一些与安全性相关的功能。 这样的概念是为了使用户能够看到一些UI组件&#xff0c;他需要具有一定级别的安全特权。 如果不满足该要求&#xff0c;则不会显示UIComponent。 让我们看一下项目结构&…

模拟生物自然进化的基因遗传算法

基因遗传算法&#xff08;Genetic Algorithm&#xff0c;GA&#xff09;是一种通过模拟生物进化过程来寻找最优解的优化算法。它是一种常见的启发式搜索算法&#xff0c;常用于优化、搜索和机器学习等领域。 生物基因遗传 生物的基因遗传是指父母通过基因传递给子代的过程。基因…

折半查找算法及分析(手工过程)

折半查找的手工过程&#xff1a; 1.我需要查找的数是10&#xff1b; 给定&#xff1a;1 5 8 10 13 14 17 22 25 27 29 31 35 37 40 42 45 47 50 51 58 下标&#xff1a;0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 1…

Bootstrap下拉菜单

前面的话 网页交互的时候经常会需要上下文菜单或者隐藏/显示菜单项&#xff0c;Bootstrap默认提供了用于显示链接列表的可切换、有上下文的菜单。而且在各种交互状态下的菜单展示需要和javascript插件配合才能使用。本文将详细介绍Bootstrap下拉菜单 使用方法 在使用Bootstrap框…

linux进程socket通信,linux进程间通信--socket套接字 实例代码

可以实现通信的代码实现&#xff0c;拿去用&#xff01;原文来自&#xff1a;http://blog.chinaunix.net/uid-26790551-id-3171897.html服务器端&#xff1a;#include #include #include #include #include #include #define UNIX_DOMAIN "/tmp/UNIX.domain"int main…

Maven发布到Nexus

1.概述 在本系列的上一篇文章中&#xff0c;我们将Maven设置为Nexus的部署过程 。 在本文中&#xff0c;我们将在项目的pom以及Jenkins作业中使用Maven配置发布过程 。 2. 为了使Maven能够发布到Nexus Repository Server&#xff0c;我们需要通过distributionManagement元素定…

mysql随机查询

select * from table as t1 join (select round(rand() * ((select max(id) from table)-(select min(id) from table))(select min(id) from table)) as id) as t2 where t1.id > t2.id order by t1.id limit 1;;转载于:https://www.cnblogs.com/upup2015/p/7782525.htm…