1. 今日内容
文章目录
2. 自定义登入学习
在前一篇文章中,我们提到了,当指定http
元素的auto-config=”true”
时,就相当于如下内容的简写:
<security:http>
<security:form-login/>
<security:http-basic/>
<security:logout/>
</security:http>
这些元素负责建立表单登录、基本的认证和登出处理。它们都可以通过指定对应的属性来改变它们的行为。
下面,我们来介绍这些元素的用法,来实现自定义登入页面。
2.1 form-login
http元素下的form-login元素是用来定义表单登录信息的。当我们什么属性都不指定的时候Spring Security会为我们生成一个默认的登录页面。如果不想使用默认的登录页面,我们可以指定自己的登录页面。
* form-login标签下的属性
1. login-page:指定登入页面的路径
2. login-processing-url:表示登入页面中提交登录时的请求地址,默认是“/login”。这个只是Spring Security用来标记登录
页面使用的提交地址,真正关于登录这个请求是不需要用户自己处理的,只需要前端的请求和这个一样就能交给spring-security处理
3. username-parameter:表示登录时提交表单时,用户名的key,默认是“username”
4. password-parameter:表示登录时提交表单时,用户名的key,默认是“password”
5. authentication-failure-url:身份验证失败后发送的请求(可以直接写也页面,相当于直接请求页面)
6. default-target-url:身份验证登陆成功后发送的请求(可以直接写也页面,相当于直接请求页面,但是一般写页面)
7. authentication-success-forward-url:身份验证登陆成功后,发送的请求也成功后,再发出请求。(可以直接写也页面,相当于直接请求页面,一般用于default-target-url的后续请求)
8. always-use-default-target: 是否使用default-target-url。默认为false。true 适用于后台管理系统,防止访问历史记录
false 适用于前台页面,提升用户体验
注意:
- default-target-url一般用来指定登入成功后立马跳转到主界面,authentication-success-forward-url用来指定登入成功且跳到主界面后发送请求用户其他信息的请求。
- 如果想要default-target-url生效,必须设置always-use-default-target=“true”
2.2 http-basic
通过定义http元素下的http-basic元素可以达到使用弹出对话框的形式进行身份验证,之前使用的是表单。
注意:如果同时设置表单和对话框,会使用表单的形式,对话框失效。
比如使用如下代码:
<security:http auto-config="true" use-expressions="false">
<security:http-basic/>
<security:intercept-url pattern="/**" access="ROLE_USER" />
</security:http>
2.3 logout
logout用来指定注销后的跳转的页面和处理url:
* logout 标签的属性:
1. logout-url:登出处理链接,默认为"/logout"
注:登出操作 只需要前端注销的请求是/logout,即可注销
比如:
logout-url=“/logout”
前端:<a href="${pageContext.request.conextPath}/logout"/>
2. logout-successurl:登出跳转的页面
3. invalidate-session: 是否删除session ,默认为"false"。
3. 自定义登入案例
3.1 login.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title></head>
<body>
<form action="login" method="post">
<table>
<tr>
<td>用户名:</td>
<td><input type="text" name="username"/></td>
</tr>
<tr>
<td>密码:</td>
<td><input type="password" name="password"/></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" value="登录"/> <input type="reset" value="重置"/></td>
</tr>
</table>
</form>
</body>
</html>
3.2 success.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title></head>
<body> success html<br> <a href="logout">退出</a></body>
</html>
3.3 failer.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title></head>
<body>登录失败</body>
</html>
3.4 web.xml文件
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-security.xml</param-value>
</context-param>
<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>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
</web-app>
3.5 spring-security.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:security="http://www.springframework.org/schema/security"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security.xsd">
<!-- 配置不过滤的资源(静态资源及登录相关) -->
<security:http security="none" pattern="/login.html"/>
<security:http security="none" pattern="/failer.html"/>
<security:http auto-config="true" use-expressions="false">
<!-- 配置资料连接,表示任意路径都需要ROLE_USER权限 -->
<security:intercept-url pattern="/**"
access="ROLE_USER"/>
<!-- 自定义登陆页面:
login-page 自定义登陆页面
authentication-failure-url 用户权限校验失败之后才会跳转到这个页面,如果数据库中没有这个用户则不会跳转到这个页面。
default-target-url 登陆成功后跳转的页面。
-->
<security:form-login login-page="/login.html" login-processing-url="/login" username-parameter="username"
password-parameter="password" authentication-failure-url="/failer.html"
default-target-url="/success.html"/> <!-- 登出, invalidate-session 是否删除session logout-url:登出处理链接 logout-successurl:登出成功页面 注:登出操作 只需要链接到 logout即可登出当前用户 -->
<security:logout invalidate-session="true" logout-url="/logout"
logout-success-url="/login.jsp"/>
<!-- 关闭CSRF,默认是开启的 -->
<security:csrf disabled="true"/>
</security:http>
<security:authentication-manager>
<security:authentication-provider>
<security:user-service>
<security:user name="user" password="{noop}user" authorities="ROLE_USER"/>
<security:user name="admin" password="{noop}admin" authorities="ROLE_ADMIN"/>
</security:user-service>
</security:authentication-provider>
</security:authentication-manager>
</beans>
3.6 结果
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/84642.html