spring-security是经常使用到的一个插件.在控制权限的插件中和框架中,并没有几个非常好用,并且功能强大的.这个spring- security插件算是比较好的了.但是我感觉在用起来还是不那么灵活和方便.不过,使用它也会给我们带来一定的方法.事情都是有利有弊的嘛.
1. 搭建 spring-security 的环境.
1). spring 项目: 导入 spring 的两个 jar 包, 加入 spring 的配置文件(注意加入 security 命名空间)
2). 加入 spring-security 的一个 jar 包
3). 在 web.xml 文件中加入相关配置
①. 搭建 spring 环境
②. 加入 spring-security 框架的过滤器
③. 在 spring 的配置文件中配置 spring-security 应用:
<!-- 配置 spring-security 的 http 安全服务 -->
<sec:http auto-config="true">
<!-- 哪些页面需要受到 spring-security 的保护, 以及访问这些页面的权限时什么 -->
<sec:intercept-url pattern="/index.jsp" access="ROLE_ADMIN, ROLE_USER"/>
<sec:intercept-url pattern="/admin.jsp" access="ROLE_ADMIN"/>
</sec:http>
<!-- 配置 spring-security 的权限信息 -->
<sec:authentication-provider>
<!-- 配置 spring-security 用户信息 -->
<sec:user-service>
<sec:user password="user" name="user" authorities="ROLE_USER"/>
<sec:user password="admin" name="admin" authorities="ROLE_ADMIN"/>
</sec:user-service>
</sec:authentication-provider>
2. DelegatingFilterProxy:
1). 是一个 Filter
2). 将 HTTP 请求委托给 Spring 应用程序上下文中的一个 Bean, 默认情况下,
DelegatingFilterProxy 会把 HTTP 请求委托给和它的 <filter-name> 属性相同的 Bean 上
3. 把 security 作为 spring 配置文件的默认命名空间.
1). 互换 ①, ② 的属性值
<beans xmlns="http://www.springframework.org/schema/beans" ①
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:sec="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-2.0.2.xsd">
</beans>
变为
<beans xmlns="http://www.springframework.org/schema/security"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:sec="http://www.springframework.org/schema/beans"
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-2.0.2.xsd">
</beans>
2). ②的属性名变为 xmlns:beans
<beans xmlns="http://www.springframework.org/schema/security"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:sec="http://www.springframework.org/schema/beans" ②
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-2.0.2.xsd">
</beans>
变为
<beans xmlns="http://www.springframework.org/schema/security"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans" ②
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-2.0.2.xsd">
</beans>
3). ③的标签名变为 beans:beans
<beans xmlns="http://www.springframework.org/schema/security" ③
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
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-2.0.2.xsd">
</beans> ③
变为
<beans:beans xmlns="http://www.springframework.org/schema/security" ③
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
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-2.0.2.xsd">
</beans:beans> ③
4. 配置登出:
1). 通过 http 节点的 logout 子节点进行配置
2). 默认的 url 为: j_spring_security_logout, 可通过 logout-url 属性修改默认的 url
3). logout-success-url 属性配置成功登出重定向页面
4). invalidate-session 属性配置是否销毁 session
5. 配置登录:
1). 通过 http 节点的 form-login 子节点进行配置
2). login-page 属性配置指定的登录页面: 但是该表单页面不能随意的定义, 例如用户名, 密码. 而应使用 spring-security 的配置方式.
3). login-processing-url 属性配置处理登陆页面的 url
4). 若直接访问登录页面, 若登录成功, 则 spring-security 默认把页面重定向到 /index.jsp 页面. 若不存在该页面,或需要重定向到其他页面,
则需要配置 default-target-url 属性; 若访问受保护的页面, 则 spring-security 框架会把请求重定向到 login-page 属性指定的页面, 若登录成功
spring-security 会把请求再重新定向到刚才请求的受保护的那个页面
5). authentication-failure-url 配置登录失败的相应页面
6). 若 always-use-default-target="true" 则只要登录成功, spring-security 都会把请求重定向到 default-target-url 属性指定的页面
6. spring-security 的自定义标签: 定制视图的显示
1). 导入 jar 包: spring-security-taglibs-2.0.5.RELEASE.jar
2). 在 jsp 页面使用 spring-secrity 提供的自定义标签: <security:authorize>
1. 搭建 spring-security 的环境.
1). spring 项目: 导入 spring 的两个 jar 包, 加入 spring 的配置文件(注意加入 security 命名空间)
2). 加入 spring-security 的一个 jar 包
3). 在 web.xml 文件中加入相关配置
①. 搭建 spring 环境
②. 加入 spring-security 框架的过滤器
③. 在 spring 的配置文件中配置 spring-security 应用:
<!-- 配置 spring-security 的 http 安全服务 -->
<sec:http auto-config="true">
<!-- 哪些页面需要受到 spring-security 的保护, 以及访问这些页面的权限时什么 -->
<sec:intercept-url pattern="/index.jsp" access="ROLE_ADMIN, ROLE_USER"/>
<sec:intercept-url pattern="/admin.jsp" access="ROLE_ADMIN"/>
</sec:http>
<!-- 配置 spring-security 的权限信息 -->
<sec:authentication-provider>
<!-- 配置 spring-security 用户信息 -->
<sec:user-service>
<sec:user password="user" name="user" authorities="ROLE_USER"/>
<sec:user password="admin" name="admin" authorities="ROLE_ADMIN"/>
</sec:user-service>
</sec:authentication-provider>
2. DelegatingFilterProxy:
1). 是一个 Filter
2). 将 HTTP 请求委托给 Spring 应用程序上下文中的一个 Bean, 默认情况下,
DelegatingFilterProxy 会把 HTTP 请求委托给和它的 <filter-name> 属性相同的 Bean 上
3. 把 security 作为 spring 配置文件的默认命名空间.
1). 互换 ①, ② 的属性值
<beans xmlns="http://www.springframework.org/schema/beans" ①
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:sec="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-2.0.2.xsd">
</beans>
变为
<beans xmlns="http://www.springframework.org/schema/security"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:sec="http://www.springframework.org/schema/beans"
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-2.0.2.xsd">
</beans>
2). ②的属性名变为 xmlns:beans
<beans xmlns="http://www.springframework.org/schema/security"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:sec="http://www.springframework.org/schema/beans" ②
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-2.0.2.xsd">
</beans>
变为
<beans xmlns="http://www.springframework.org/schema/security"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans" ②
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-2.0.2.xsd">
</beans>
3). ③的标签名变为 beans:beans
<beans xmlns="http://www.springframework.org/schema/security" ③
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
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-2.0.2.xsd">
</beans> ③
变为
<beans:beans xmlns="http://www.springframework.org/schema/security" ③
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
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-2.0.2.xsd">
</beans:beans> ③
4. 配置登出:
1). 通过 http 节点的 logout 子节点进行配置
2). 默认的 url 为: j_spring_security_logout, 可通过 logout-url 属性修改默认的 url
3). logout-success-url 属性配置成功登出重定向页面
4). invalidate-session 属性配置是否销毁 session
5. 配置登录:
1). 通过 http 节点的 form-login 子节点进行配置
2). login-page 属性配置指定的登录页面: 但是该表单页面不能随意的定义, 例如用户名, 密码. 而应使用 spring-security 的配置方式.
3). login-processing-url 属性配置处理登陆页面的 url
4). 若直接访问登录页面, 若登录成功, 则 spring-security 默认把页面重定向到 /index.jsp 页面. 若不存在该页面,或需要重定向到其他页面,
则需要配置 default-target-url 属性; 若访问受保护的页面, 则 spring-security 框架会把请求重定向到 login-page 属性指定的页面, 若登录成功
spring-security 会把请求再重新定向到刚才请求的受保护的那个页面
5). authentication-failure-url 配置登录失败的相应页面
6). 若 always-use-default-target="true" 则只要登录成功, spring-security 都会把请求重定向到 default-target-url 属性指定的页面
6. spring-security 的自定义标签: 定制视图的显示
1). 导入 jar 包: spring-security-taglibs-2.0.5.RELEASE.jar
2). 在 jsp 页面使用 spring-secrity 提供的自定义标签: <security:authorize>