Spring-security3配置笔录

环境:

jdk8 tomcat8 maven idea


版本:

spring-security-3.1.4.release


配置:

1,pom.xml增加security

<dependency>

    <groupId>org.springframework.security</groupId>

    <artifactId>spring-security-core</artifactId>

    <version>3.1.4.RELEASE</version>

</dependency>

<dependency>

    <groupId>org.springframework.security</groupId>

    <artifactId>spring-security-config</artifactId>

    <version>3.1.4.RELEASE</version>

</dependency>

2,注册security代理filter,在web.xml中配置security过滤器。security是利用过滤器进行权限的验证。在web.xml中注册一个security过滤器链的代理,在项目启动后,会根据security.xml中的配置,为每个请求的url加上访问权限,filter注册配置在web.xml中,url-pattern标签设置为/*表示需要对所有的请求进行拦截。

<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>

3,配置security.xml

<http>标签:包括登陆,登出,url权限配置都是在http标签中指定,子标签<intercept-url>是用来设置对url的拦截

如:<intercept-url pattern="/rs/main/admin" access="hasRole('ROLE_ADMIN')" />

是对"/rs/main/admin”这个url的请求拦截,security拦截器链在获取用户的请求匹配,会去检测请求用户是否拥有ROLE_ADMIN权限,是则通过身份验证,否则访问拒绝

<authentication-manager>:权限认证标签。我们可以在此标签中进行用户的权限认证操作,在demo实例程序中,注入了一个customUserAuthService,继承自UserDetailService

自定义权限认证器,可以灵活的对用户进行身份认证。

配置选项在spring-security.xml中讲解说明

标签:

jsp中的权限标签使用

首先需要在页面中引入标签库:

<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %>

在页面中获取认证用户的姓名:<sec:authentication property="name"/>

在页面中只有ROULE_USER权限的用户才可以显示

<sec:authorize access="hasRole('ROLE_USER')">

原理:

(1)在web.xml中配置过滤器代理,这样就可以控制这个项目的每个请求。

(2)在spring-security.xml配置,其中http标签配置如何截用户请求,和配置用户认证(固定用户、使用数据库管理用户)。

(3)过滤器最上层为HttpSessionContextIntegrationFilter、最后是LogoutFilter

(4)spring security中重要的类SecurityContextHolder提供几种访问SecurityContext的方式;SecurityContext,

保存Authentication认证信息,和请求对应的安全信息;Authentication,展示Spring Security特定的主体

(5)以登陆和退出为例说明,登陆成功后通过认证,认证信息保存到securityContext中并给holder。

并可以通过String id= SecurityContextHolder.getContext().getAuthentication().getName(); 取出用户信息。

退出时则清空securityContextHolder。


实例demo中实现了authenticationManager管理器 以对用户的身份进行验证,在此管理器中主要是根据用户提交的用户名从数据库中或者其他地方获取用户的信息,然后创建一个security内置的user对象,以与用户提交并被保存在session中的用户表单信息进行验证,验证用户是否是合法并是否有相应的权限访问资源


登陆验证的实现也是通过过滤器来进行的,如上所述,对于用户访问,若是登陆请求,在身份验证阶段会将合法用户的信息存储到一个SecurityContextHolder中,若不合法将丢出exception并将用户指引到配置的页面(登陆页面或者访问拒绝页面),对于登陆成功的用户,在以后的资源访问过程中,身份验证器会先判断SecurityContextHolder是否存在此用户的信息,若存在,就将用户的身份信息传给以后的filter作为用户的身份凭证。一层层的直至访问到相应的资源。


投票机制:使用spring-security默认的就足够了,如果需要自己实现,跟身份验证器的实现类似,在demo实例中没有实现投票器。


用户—角色—资源


角色是用户与资源之间的纽带。通过设置角色所持有的权限及资源访问的权限,然后将相应的角色分配给用户,实现了资源对不同用户的屏蔽。spring-security通过filter将访问拦截,并根据我们设置的权限资源表(这个可以自己设计,数据库表,xml配置都可以)来确定一个用户是否拥有对资源的访问权限,多层filter过滤以屏蔽非法访问保护资源。



关于spring-security的filter





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值