JavaWeb进阶修炼手册36---spring-security(二)自定义登入

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 适用于前台页面,提升用户体验

注意:

  1. default-target-url一般用来指定登入成功后立马跳转到主界面,authentication-success-forward-url用来指定登入成功且跳到主界面后发送请求用户其他信息的请求。
  2. 如果想要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 结果

登入:
在这里插入图片描述
登入成功:
在这里插入图片描述
登入失败:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_43546676/article/details/105309259