1.web.xml中加载spring ,spring security

2.spring security配置文件中配置好....

3.自己写一个myFilter代替原有的FilterSecurityInterceptor过滤器,并分别实现AccessDecisionManager、

InvocationSecurityMetadataSourceService和UserDetailsService.如下:

<beans:bean id="myFilter" class="org.springframework.security.web.access.intercept.FilterSecurityInterceptor">

<beans:property name="authenticationManager"

ref="authenticationManager" />

<beans:property name="accessDecisionManager"

ref="myAccessDecisionManager" />

<beans:property name="securityMetadataSource"

ref="securityMetadataSource" />

</beans:bean>

4.配置上面的3个bean,具体如下:

4.1 认证管理器     即:是否可以登录(包括是否锁定了,是否过期了等....)

<authentication-manager alias="authenticationManager">

<authentication-provider

user-service-ref="myUserDetailService">

<!--   如果用户的密码采用加密的话

<password-encoder hash="md5" />

-->

</authentication-provider>

</authentication-manager>

4.2决策管理器     即:是否有权限访问资源

<beans:bean id="MyAccessDecisionManager"
 class="org.springframework.security.access.vote.AffirmativeBased"
  <beans:property name="decisionVoters">
   <beans:list>
    <beans:bean class="org.springframework.security.access.vote.RoleVoter">
     <!-- 将授权名称的默认前缀由ROLE_改为空. -->
     <beans:property name="rolePrefix" value=""></beans:property>
    </beans:bean>
    <beans:bean class="org.springframework.security.access.vote.AuthenticatedVoter"></beans:bean>
   </beans:list>
  </beans:property>
 </beans:bean>

4.3 授权处理器    即定义某一资源可以被哪些用户组访问

<beans:bean id="securityMetadataSource"
        class="com.aostarit.spring.security.MyInvocationSecurityMetadataSource" />

注意,4.3表示直接利用默认的授权处理器,它会从配置文件中读取group-->resource的对应关系,而非从数据库读取! 所以还需给告诉他初始化的时候用如下两个参数:

<b:constructor-arg type="org.springframework.security.web.util.UrlMatcher"
   ref="myUrlPathMatcher" />
  <!-- url对应authority的map -->
  <b:constructor-arg type="java.util.LinkedHashMap"
   ref="requestMap" />

既然如此,我们干脆自己写一个类得了,不用框架提供的类了.implements FilterInvocationSecurityMetadataSource 即可. 具体见资料.
      4.1.1

  真正干事的其实是这个myUserDetailService,他要实现UserDetailsService接口,

  这个接口中的方法:public UserDetails loadUserByUsername(String username)真正干事,<!--再调用什么dao层我就不管了,呵呵-->

  注意咯:返回的 UserDetails,我们返回一个实现了 UserDetails接口的类A即可.

  注意咯:A还有两个特点,①.她里面的数据就是从数据库读出来的数据,比如username,password,她不管页面提交的password的. 究竟是怎么验证密码的,这个要找框架本身了.②.他的权限set的时候还有点小技巧,这个见我的项目的SecurityUser里的setAuthorities(List<Object[]> l)方法.

<beans:bean id="myUserDetailService"  class="com.aostarit.spring.security.MyUserDetailService" >
     <beans:property name="securityDao" ref="securityDao"></beans:property>
    </beans:bean>

****securityDao,这个自己写咯......自己配咯.....

spring security开发步骤的更多相关文章

  1. Spring Security开发安全的REST服务

    第1章 课程导学 项目介绍 Java实战:Spring Security开发安全的REST服务,来自慕客网的视频 ,主要讲认证和授权. 企业级的认证和授权 从0开始实现一个可重用的,企业级的,认证和授 ...

  2. Hibernate+Spring整合开发步骤

    Hibernate是一款ORM关系映射框架+Spring是结合第三方插件的大杂烩,Hibernate+Spring整合开发效率大大提升. 整合开发步骤如下: 第一步:导入架包: 1.Hibernate ...

  3. spring程序开发步骤

    1.使用spring框架之前的开发步骤 2.使用spring之后的开发步骤 3.文字描述 1.导入Spring开发的基本依赖 2.编写Dao接口和实现类 3.创建spring核心配置文件 4.在spr ...

  4. Spring Security开发Restful服务

    2-1开发环境安装 1.jdk8安装 2.安装STS    Spring Tool Suite实际上就是一个eclipse,只不过在此基础上又安装了一些插件 3.安装mysql 2-2代码结构介绍 打 ...

  5. 开发步骤Dubbo、spring mvc、springboot、SSM开发步骤

    一.Dubbo开发步骤: 链接:https://pan.baidu.com/s/1pMPO1kf 密码:9zaa 第一: 1.创建consumer工程2.在pom.xml文件下添加配置3.添加appl ...

  6. 开发步骤Dubbo、spring mvc、springboot、SSM整合开发步骤

    一.Dubbo开发步骤: 链接:https://pan.baidu.com/s/1pMPO1kf 密码:9zaa 第一: 1.创建consumer工程2.在pom.xml文件下添加配置3.添加appl ...

  7. Spring-boot & spring.security

    spring.security提供了一种身份认证框架,开发者可以在这个框架中实现各种方式的用户身份管理,比如:LDAP.MYSQL.OAUTH.Mongo等等. spring.security认证步骤 ...

  8. OAuth 2 开发人员指南(Spring security oauth2)

    https://github.com/spring-projects/spring-security-oauth/blob/master/docs/oauth2.md 入门 这是支持OAuth2.0的 ...

  9. Spring Security 解析(六) —— 基于JWT的单点登陆(SSO)开发及原理解析

    Spring Security 解析(六) -- 基于JWT的单点登陆(SSO)开发及原理解析   在学习Spring Cloud 时,遇到了授权服务oauth 相关内容时,总是一知半解,因此决定先把 ...

随机推荐

  1. python week08 并发编程之多进程--理论部分

    一 什么是进程 进程:正在进行的一个过程或者说一个任务.       而负责执行任务则是cpu. 举例(单核+多道,实现多个进程的并发执行): Jame在一个时间段内有很多任务要做:python学习任 ...

  2. day01_14.遍历数组

    <?php $a = array('a','b','c'); print_r($a); ?> 输出结果:Array ( [0] => a [1] => b [2] => ...

  3. getattr、setattr、hasattr

    写一个演示类 class test(): title="验证getattr.setattr.hasattr方法" def run(self): return "run方法 ...

  4. 服务器迁移至Linux操作系统

    我在这里试了ubuntu.Debian,centos.最终还是选择了centos 使用工具putty,远程桌面的话使用vnc viewer(看起来service文件更改只需要替换user,但是路径不对 ...

  5. Set容器——HashSet及常用API

    Set容器特点: ①   Set容器是一个不包含重复元素的Collection,并且最多包含一个null元素,它和List容器相反,Set容器不能保证其元素的顺序; ②   最常用的两个Set接口的实 ...

  6. 九度oj 题目1184:二叉树遍历

    题目描述: 编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储). 例如如下的先序遍历字符串:ABC##DE#G##F###其中“#”表示的是空格,空格字符代表空 ...

  7. 九度oj 题目1356:孩子们的游戏(圆圈中最后剩下的数)

    题目描述: 每年六一儿童节,JOBDU都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此.HF作为JOBDU的资深元老,自然也准备了一些小游戏.其中,有个游戏是这样的:首先,让小朋友们围成一个大圈. ...

  8. math & 三元一次方程组的解法

    math & 三元一次方程组的解法 class 6 math 例题 问题: 1. 已经做好的与没有做好的比例是 5 比 7; 2 再做好51,完成总数的 70%; 3. 问,一共要做多少朵花? ...

  9. background-position-x和background-position-y的兼容性问题

    一.语法: background-position-x : length | left | center | right background-position-y : length | left | ...

  10. jQUery中的$(document).ready()方法和window.onload()方法的区别

    1.常规的Javascript代码中,通常使用window.onload方法 window.onload = function(){//代码} 2.jquery中,则使用$(document).rea ...