SpringSecurity3实战

版权声明:如需转载请注明出处,侵权必究!!! https://blog.csdn.net/mambaMentality/article/details/79952766
*1.为什么要学习SpringSecurity?
    *1.session窃取(固化攻击):解决方法登录前一个cookie信息 (sessionId),登录后改一个cookie(sessionId)
    *2.网站资源没有经过权限保护
*2.什么是SpringSecurity?
    Spring 基于Spring框架编写的(IOC核心功能,可以与spring进行无缝集成)
    Security 提高系统的安全性
    是一个开源的框架。
*3.关于SpringSecurity的版本
    社区比较活跃,版本升级比较的频繁。
    教学版本:spring security 3.1
*4编写Hello world体验SpringSecurity3.1作用
    *1.搭建开发环境
        jar包、配置文件、在web.xml中配置springsecurity
        web.xml中的配置
        <!-- 配置springsecurity session监听,主要实现session固化攻击防御和session并发控制 -->
        <listener>
            <listener-class>org.springframework.security.web.session.HttpSessionEventPublisher</listener-class>
        </listener>

        <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>
    *2.测试 crm/index.jsp
        springsecurity内置一个登录页面
*5.细研SpringSecurity3.1
    *1.如何告诉springsecurity,正确的用户名和密码?
        *1.1.硬编码方式:
            <!-- 配置认证管理器 -->
            <security:authentication-manager alias="authenticationManager">
                <security:authentication-provider>
                    <!-- 通过硬编码的方式提供 -->
                    <security:user-service>
                        <security:user name="william" password="william" authorities="ROLE_MASTER22"/>
                    </security:user-service>
                </security:authentication-provider>
            </security:authentication-manager>

        缺点:
        在实际开发里面,不能使用.都要使用从数据库里面查询的方式
        authorities="ROLE_MASTER22"权限名,如果与访问资源所需要的权限名不同的话,页面将抛出403异常(权限被拒绝)

    *2.如何告诉springsecurity使用我们自定义的登录表单
        *1.springSecurity配置文件中:
        <!-- 配置登录页面 -->
        <!-- login-page:默认指定的登录页面. authentication-failure-url:出错后跳转页面. default-target-url:成功登陆后跳转页面.
            login-processing-url:发送的登录请求 -->
        <security:form-login default-target-url="/sys/loginAction.action"
            login-page="/login.jsp" authentication-failure-url="/prelogin.jsp"
            login-processing-url="/loginForSpringSecurity" />
         
        *2.把login.jsp <form action="loginForSpringSecurity">
        *3.把login.jsp <form action="loginForSpringSecurity">里面的用户名和密码的name属性值进行更改
            <input class="user_name" type="text" name="j_username" id="username" />
            <input class="user_pwd" type="password"  name='j_password' id="password" />
    
    *3.把springSecurity配置成企业级应用
        *1.执行原理
            *1.1.文字版
                1)容器启动(CustomFilterInvocationSecurityMetadataSourceImpl:loadResourceDefine加载系统资源与权限列表)
                2)用户发出请求
                3)过滤器拦截(CustomFilterSecurityInterceptorImpl:doFilter)
                4)取得请求资源所需权限(CustomFilterInvocationSecurityMetadataSourceImpl:getAttributes)
                5)匹配用户拥有权限和请求权限(CustomAccessDecisionManagerImpl:decide),如果用户没有相应的权限,
                执行第6步,否则执行第7步。
                6)登录
                7)验证并授权(CustomUserDetailsServiceImpl:loadUserByUsername)
                8)重复4,5
            *1.2.图形版
        *2.讲配置
            *1.从数据库里面,加载资源与角色的列表
                实现FilterInvocationSecurityMetadataSource接口
            *2.用户的请求,如何给我们自定义的拦截器
                Filter
            *3.自定义规则器(匹配访问该资源的权限与目前登录者所具有的权限 )
                *3.1.看看当前登录者身份信息(角色是什么)
                    自定义授权认证器:必须实现UserDetailsService接口
                    返回数据的dto必须实现 UserDetails接口    

                *3.2.根据请求资源的uri,从map里面加载访问该资源所应有的角色是什么
                *3.3.资源所应有的角色与当前登录者的角色进行比较
                    *1.情况一:如果该用户没有进行登录,跳转到登录页面去
                    *2.情况二:如果该用户已经进行登录,但没有访问该资源的权限,则抛出403异常
                    自定义的比较器,需要继续AccessDecisionManager类

            *4.配置SpringSecurity的md5加密类
                继承:BasePasswordEncoder
                让SpringSecurity自动调用


    *4.如何在Struts2里面拿到由SpringSecurity3.1.x验证后的用户信息?
        SysUserDTO result = (SysUserDTO)SecurityContextHolder.getContext().getAuthentication().getPrincipal();
            












阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页