A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

【郑州校区】传智健康项目讲义第八章 六

3.4.3 配置spring-security.xml
spring-security.xml中主要配置Spring Security的拦截规则和认证管理器。
[AppleScript] 纯文本查看 复制代码
<?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:context="http://www.springframework.org/schema/context"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:security="http://www.springframework.org/schema/security"
xsi:schemaLocation="http://www.springframework.org/schema/beans
[url]http://www.springframework.org/schema/beans/spring[/url]‐beans.xsd
[url]http://www.springframework.org/schema/mvc[/url]
[url]http://www.springframework.org/schema/mvc/spring[/url]‐
mvc.xsd
[url]http://code.alibabatech.com/schema/dubbo[/url]
[url]http://code.alibabatech.com/schema/dubbo/dubbo.xsd[/url]
[url]http://www.springframework.org/schema/context[/url]
[url]http://www.springframework.org/schema/context/spring[/url]‐context.xsd
[url]http://www.springframework.org/schema/security[/url]
[url]http://www.springframework.org/schema/security/spring[/url]‐security.xsd">
<!‐‐
http:用于定义相关权限控制
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')" />
</security:http>
<!‐‐
authentication‐manager:认证管理器,用于处理认证操作
‐‐>
<security:authentication‐manager>
<!‐‐
authentication‐provider:认证提供者,执行具体的认证逻辑
‐‐>
<security:authentication‐provider>
<!‐‐
user‐service:用于获取用户信息,提供给authentication‐
provider进行认证
‐‐>
<security:user‐service>
<!‐‐
user:定义用户信息,可以指定用户名、密码、角色,后期可以改
为从数据库查询用户信息
{noop}:表示当前使用的密码为明文
‐‐>
<security:user name="admin"
password="{noop}admin"
authorities="ROLE_ADMIN">
</security:user>
</security:user‐service>
</security:authentication‐provider>
</security:authentication‐manager>
</beans> 

3.5 对入门案例改进
前面我们已经完成了Spring Security的入门案例,通过入门案例我们可以看到,SpringSecurity将我们项目中的所有资源都保护了起来,要访问这些资源必须要完成认证而且需要具有ROLE_ADMIN角色。
但是入门案例中的使用方法离我们真实生产环境还差很远,还存在如下一些问题:
1、项目中我们将所有的资源(所有请求URL)都保护起来,实际环境下往往有一些资源不需要认证也可以访问,也就是可以匿名访问。
2、登录页面是由框架生成的,而我们的项目往往会使用自己的登录页面。
3、直接将用户名和密码配置在了配置文件中,而真实生产环境下的用户名和密码往往保存在数据库中。
4、在配置文件中配置的密码使用明文,这非常不安全,而真实生产环境下密码需要进行加密。
本章节需要对这些问题进行改进。
3.5.1 配置可匿名访问的资源
第一步:在项目中创建pages目录,在pages目录中创建a.htmlb.html
第二步:在spring-security.xml文件中配置,指定哪些资源可以匿名访问

[AppleScript] 纯文本查看 复制代码
<!‐‐
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目录下的文件可以在没有认证的情况下任意访问。
3.5.2 使用指定的登录页面
第一步:提供login.html作为项目的登录页面

[AppleScript] 纯文本查看 复制代码
<html>
<head>
<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页面可以匿名访问
[AppleScript] 纯文本查看 复制代码
 <security:http security="none" pattern="/login.html" />


第三步:修改spring-security.xml文件,加入表单登录信息的配置
[AppleScript] 纯文本查看 复制代码
 <!‐‐
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"
/> 


第四步:修改spring-security.xml文件,关闭CsrfFilter过滤器

[AppleScript] 纯文本查看 复制代码
<!‐‐
csrf:对应CsrfFilter过滤器
disabled:是否启用CsrfFilter过滤器,如果使用自定义登录页面需要关闭此项,否则
登录操作会被禁用(403)
‐‐>
<security:csrf disabled="true"></security:csrf> 


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马