基于Spring Security框架入门_01创建的项目进行:
创建登录页面(login.html)和登录失败页面(login_error.html),添加favicon.ico 到根目录(网站图标)
login.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>登录</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="text" name="password" ></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="登录" ></td>
</tr>
</table>
</form>
</body>
</html>
login_error.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>账号或者密码错误</h1>
</body>
</html>
修改spring 配置文件spring-security.xml
<?xml version="1.0" encoding="UTF-8"?>
<bean:beans xmlns="http://www.springframework.org/schema/security"
xmlns:bean="http://www.springframework.org/schema/beans" 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="none" 设置此资源不被拦截 -->
<http pattern="/login_error.html" security="none"></http>
<http pattern="/login.html" security="none"></http>
<http pattern="/*.ico" security="none"></http>
<http>
<intercept-url pattern="/*" access="hasRole('ROLE_USER')" />
<form-login login-page="/login.html" default-target-url="/index.html"
authentication-failure-url="/login_error.html"/>
<csrf disabled="true"/>
<logout/>
<headers>
<frame-options policy="SAMEORIGIN"/>
</headers>
</http><!-- 认证管理器 --><authentication-manager><authentication-provider><user-service><user name="root" password="123456" authorities="ROLE_USER"/></user-service></authentication-provider></authentication-manager></bean:beans>
启动访问首页,登陆页面和错误页面改变
csrf disabled="true" 关闭csrf ,如果不加会出现错误
CSRF(Cross-site request forgery)跨站请求伪造,也被称为“One Click Attack”或者Session
Riding,通常缩写为CSRF 或者XSRF,是一种对网站的恶意利用。
如果你没有设置登录页security="none" ,将会出现'该网页无法正常运行'
form-login属性详解
form-login是spring security命名空间配置登录相关信息的标签,它包含如下属性:
1. login-page 自定义登录页url,默认为/login
2. login-processing-url 登录请求拦截的url,也就是form表单提交时指定的action
3. default-target-url 默认登录成功后跳转的url
4. always-use-default-target 是否总是使用默认的登录成功后跳转url
5. authentication-failure-url 登录失败后跳转的url
6. username-parameter 用户名的请求字段 默认为userName
7. password-parameter 密码的请求字段 默认为password
8. authentication-success-handler-ref 指向一个AuthenticationSuccessHandler用于处理认证成功的请求,不能和default-target-url还有always-use-default-target同时使用
9. authentication-success-forward-url 用于authentication-failure-handler-ref
10. authentication-failure-handler-ref 指向一个AuthenticationFailureHandler用于处理失败的认证请求
11. authentication-failure-forward-url 用于authentication-failure-handler-ref
12. authentication-details-source-ref 指向一个AuthenticationDetailsSource,在认证过滤器中使用
SAMEORIGIN:
<headers>
<frame-options policy="SAMEORIGIN"/>
</headers>
spring Security下,X-Frame-Options默认为DENY,非Spring Security环境下,X-Frame-Options的默认大多也是DENY,这种情况下,浏览器拒绝当前页面加载任何Frame页面,设置含义如下:
DENY:浏览器拒绝当前页面加载任何Frame页面
SAMEORIGIN:frame页面的地址只能为同源域名下的页面
ALLOW-FROM:origin为允许frame加载的页面地址。
<logout/>
加此配置后,会自动的产生退出登录的地址/logout,如果你不想用这个地址,你也可以定义
生成的退出地址以及跳转的页面,配置如下
<logout logout-url="" logout-success-url=""/>
logout-url:退出的地址,会自动生成
logout-success-url:退出后跳转的地址