1. 配置可匿名访问的资源
第一步:在项目中创建pages目录,在pages目录中创建a.html和b.html
第二步:在spring_security.xml文件中配置,指定哪些资源可以匿名访问
<!--
http:用于定义相关权限控制
配置哪些资源可以匿名访问(即不登录也可以访问)
-->
<security:http security="none" pattern="/pages/a.html" />
<security:http security="none" pattern="/paegs/b.html" />
<!-- 使用通配符方式,使代码更为简洁 --> <security:http security="none" pattern="/pages/**"></security:http>
注:此时pages目录中仅创建a.html和b.html两个页面。因此,通过以上配置,pages目录下的文件可以在没有认证的情况下任意访问。
2. 使用指定的登录页面
第一步:提供login.html作为项目的登录页面
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<title>登录页面</title>
</head>
<body>
<form action="login.do" method="post">
username:<input type="text" name="username"><br>
password:<input type="password" name="password"><br>
<input type="submit" value="submit">
</form>
</body>
</html>
第二步:修改spring-security.xml文件,指定login.html页面可以匿名访问
<security:http security="none" pattern="/login.html" />
第三步:修改spring-security.xml文件,加入表单登录信息的配置
注:如果我们要使用自己指定的页面作为登录页面,必须配置登录表单,页面提交的登录表单请求是由框架负责处理。
第四步:修改spring-security.xml文件,关闭CsrfFilter过滤器
<!-- csrf:对应CsrfFilter过滤器 disabled:是否启用CsrfFilter过滤器,如果使用自定义登录页面需要关闭此项,否则登录操作会被禁用(403) --> <security:csrf disabled="true"></security:csrf>
修改后完整代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:security="http://www.springframework.org/schema/security"
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">
<!--
http:用于定义相关权限控制
配置哪些资源可以匿名访问(不登录也可以访问)
-->
<!-- <security:http security="none" pattern="/pages/a.html" />-->
<!-- <security:http security="none" pattern="/paegs/b.html" />-->
<!-- 使用通配符方式,使代码更为简洁 -->
<!-- <security:http security="none" pattern="/pages/**"></security:http>-->
<security:http security="none" pattern="/login.html" />
<!--
auto-config:是否自动配置
设置为true时框架会提供默认的一些配置,例如提供默认的登录页面、登出处理等
设置为false时需要显示提供登录表单配置,否则会报错
use-expressions:用于指定intercept-url中的access属性是否使用表达式
-->
<security:http auto-config="true" use-expressions="true">
<!--
intercept-url:定义一个拦截规则
pattern:对哪些url进行权限控制
access:在请求对应的URL时需要什么权限,默认配置时它应该是一个以逗号分隔的角色列表,
请求的用户只需拥有其中的一个角色就能成功访问对应的URL
-->
<security:intercept-url pattern="/**" access="hasRole('ROLE_ADMIN')" />
<!-- form-login:定义表单登录信息 -->
<security:form-login login-page="/login.html"
username-parameter="username"
password-parameter="password"
login-processing-url="/login.do"
default-target-url="/index.html"
authentication-failure-url="/login.html"
/>
<!--
csrf:对应CsrfFilter过滤器
disabled:是否启用CsrfFilter过滤器,如果使用自定义登录页面需要关闭此项,否则登录操作会被禁用(403)
-->
<security:csrf disabled="true"></security:csrf>
</security:http>
<!--
authentication-manager:配置认证管理器,用于处理认证操作
-->
<security:authentication-manager>
<!-