`

Spring Security

阅读更多
    Spring Security
    11个步骤为应用程序添加安全防护
    历史与现状
    自2003年出现的Spring扩展插件Acegi Security发展而来。
    目前最新 版本为3.x,已成为Spring的一部分。
    为J2EE企业应用程序提供可靠的安全性服务。
    Authentication vs. Authorization
    区分概念验证与授权
    验证
    这 个用户是谁?
    用户身份可靠吗?
    授权
    某用户A是否可以访问资源R
    某用户A是否可以执行M操作
    某用户A是否可以对资 源R执行M操作
    SS中的验证特点
    支持多种验证方式
    支持多种加密格式
    支持组件的扩展和替换
    可以本地化 输出信息
    SS中的授权特点
    支持多种仲裁方式
    支持组件的扩展和替换
    支持对页面访问、方法访问、对象访问 的授权。
    SS核心安全实现
    Web安全
    通过配置Servlet Filter激活SS中的过滤器链
    实现 Session一致性验证
    实现免登陆验证(Remember-Me验证)
    提供一系列标签库进行页面元素的安全控制
    方法安全
    通 过AOP模式实现安全代理
    Web安全与方法安全均可以使用表达式语言定义访问规则
    配置SS
    配置Web.xml,应用安全过滤器
    配置Spring,验证与授权部分
    在web页面 中获取用户身份
    在web页面中应用安全标签库
    实现方法级安全
    1:配置web.xml
    Java代码
        <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> 
        <context-param> 
        <param-name>contextConfigLocation</param-name> 
        <param-value>classpath:spring.xml</param-value> 
        </context-param> 
        <listener> 
        <listener-class> 
        org.springframework.web.context.ContextLoaderListener 
        </listener-class> 
        </listener> 
    2:Spring配置文件中设置命名空间
    Java代码
        <?xml version="1.0" encoding="UTF-8"?> 
        <beans:beansxmlns="http://www.springframework.org/schema/security" 
        xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xsi:schemaLocation="http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
        http://www.springframework.org/schema/security 
        http://www.springframework.org/schema/security/spring-security-3.0.xsd"> 
        </beans:beans> 
    
    3:配置最基本的验证与授权
    Java代码
        <http auto-config="true"> 
        <intercept-url pattern="/**" access="ROLE_USER" /> 
        </http> 
        <authentication-manager> 
        <authentication-provider> 
        <user-service> 
        <user name="tom" password="123" authorities="ROLE_USER, ROLE_A" /> 
        <user name="jerry" password="123" authorities="ROLE_USER, ROLE_B" /> 
        </user-service> 
        </authentication-provider> 
        </authentication-manager> 
    4:通过数据库验证用户身份
    Java代码
        <authentication-manager> 
        <authentication-provider> 
        <password-encoder hash=“md5”/> 
        <jdbc-user-service data-source-ref="dataSource"/> 
        </authentication-provider> 
        </authentication-manager> 
        数 据表结构见SS说明手册附录A 
    5:完善web页面验证规则
    Java代码
        <http auto-config="true"> 
        <intercept-url pattern="/js/**" filters="none"/> 
        <intercept-url pattern="/css/**" filters="none"/> 
        <intercept-url pattern="/images/**" filters="none"/> 
        <intercept-url pattern="/a.jsp" access="ROLE_A" /> 
        <intercept-url pattern="/b.jsp" access="ROLE_B" /> 
        <intercept-url pattern="/c.jsp" access="ROLE_A, ROLE_B" /> 
        <intercept-url pattern="/**" access="ROLE_USER" /> 
        </http> 
    6:自定义验证配置
    Java代码
        <!-- 指 定登陆页面、成功页面、失败页面--> 
        <form-login login-page="/login.jsp" default-target-url="/index.jsp" authentication-failure-url="/login.jsp" /> 
        <!-- 尝 试访问没有权限的页面时跳转的页面 --> 
        <access-denied-handler error-page="/accessDenied.jsp"/> 
        <!-- 使 用记住用户名、密码功能,指定数据源和加密的key --> 
        <remember-me data-source-ref="dataSource" /> 
        <!-- logout 页面,logout后清除session --> 
        <logout invalidate-session="true" logout-success-url="/login.jsp" /> 
        <!-- session 失 效后跳转的页面,最大登陆次数 --> 
        <session-management invalid-session-url="/sessionTimeout.htm"> 
        <concurrency-control max-sessions="1" expired-url="/sessionTimeout.htm" /> 
        </session-management> 
        </http> 
        可 以使用SS自带的登陆页面作为login.jsp的模板 
    7:本地化消息输出
    拷贝本地化资源文件后,在配置文件中加载该文件:
    Java代码
        <!-- 加 载错误信息资源文件 --> 
        <beans:bean id="messageSource"  
        class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> 
        <beans:property name="basename" value="classpath:messages"/> 
        </beans:bean> 
        资 源文件在SS核心包:spring-security-core-3.0.2.RELEASE.jar的orgspringframeworksecurity目录 中 
    8:在web页面中获取用户信息
    Java代码
        方式 一:Java代码 
        Authentication auth = SecurityContextHolder.getContext().getAuthentication(); 
        Collection<GrantedAuthority> col = auth.getAuthorities(); 
        方 式二:标签库 
        <%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %> 
        <sec:authentication property="name“/> 
        <sec:authentication property="authorities“/> 
    9:在web页面进行元素安全控制
    Java代码
        方式一 
        <sec:authorizeifAnyGranted="ROLE_A"> 
        <a href="a.jsp">你可以访问a.jsp</a> 
        </sec:authorize> 
        <sec:authorizeifNotGranted="ROLE_A"> 
        你 不可以访问a.jsp 
        </sec:authorize> 
        方 式二 
        <sec:authorizeurl="/a.jsp"> 
        <a href="a.jsp">你可以访问a.jsp</a> 
        </sec:authorize> 
    10:全局方法安全控制
    Java代码
        <global-method-security pre-post-annotations="enabled"> 
        <protect-pointcut expression="execution(* com.xasxt.*Service.add*(..))" access="ROLE_A"/> 
        <protect-pointcut expression="execution(* com.xasxt.*Service.delete*(..))" access="ROLE_B"/> 
        </global-method-security> 
        此 处使用了AspectJ中常用的切入点表达式(百度:AspectJ execution) 
    11:使用注解进行方法安全控制
    Java代码
        public class DemoService { 
        @PreAuthorize("hasRole(&apos;ROLE_A&apos;)") 
        public void methodA() { 
        } 
        @PreAuthorize("hasAnyRole(&apos;ROLE_A, ROLE_B&apos;)") 
        public void methodB() { 
        } 
        } 
        hasRole 与hasAnyRole为SS通用内置表达式(google : spring security Common Built- In Expressions) 
    12:下一步做什么???
    采用更安全的验证方式
    采用安全的数据传输方式
    实现动态授权
    自 定义验证与授权部件
    实现数据级安全
分享到:
评论

相关推荐

    Spring Security in Action

    Spring Security 实践指南 Spring Security 是一个基于 Java 的安全框架,旨在提供身份验证、授权和访问控制等功能。下面是 Spring Security 的主要知识点: 一、身份验证(Authentication) 身份验证是指对用户...

    SpringSecurity.pdf

    Spring Security是一个功能强大、高度定制的安全框架,它专门用于为基于Spring的应用程序提供安全性解决方案。Spring Security架构的设计初衷是为了解决认证和授权的需求,确保应用程序的安全性。它提供了全面的安全...

    Spring Security 资料合集

    Spring Security 是一个强大的安全框架,主要用于Java应用的安全管理,它为Web应用和企业级应用提供了全面的安全服务。这个框架能够处理认证、授权以及各种安全相关的功能,帮助开发者构建安全、可扩展的应用。以下...

    spring security 完整项目实例

    Spring Security 是一个强大的安全框架,用于为Java应用提供身份验证和授权服务。在这个完整的项目实例中,我们将深入探讨Spring Security的核心概念以及如何将其应用于实际的Web应用程序开发。 首先,我们从用户、...

    Spring Cloud Gateway 整合 Spring Security 统一登录认证鉴权

    在压缩包文件`spring_gateway_security_webflux`中,可能包含了示例代码或配置文件,用于演示如何在Spring Cloud Gateway中集成Spring Security,实现统一登录认证鉴权。这些资源可以帮助开发者更快地理解和实践上述...

    springsecurity学习笔记

    在"springsecurity学习笔记"中,你可能会涉及以下主题: - Spring Security的基本配置,包括web安全配置和全局安全配置。 - 如何自定义认证和授权流程,比如实现自定义的AuthenticationProvider和...

    SpringBoot+SpringSecurity处理Ajax登录请求问题(推荐)

    SpringBoot+SpringSecurity处理Ajax登录请求问题 SpringBoot+SpringSecurity处理Ajax登录请求问题是SpringBoot开发中的一個常见问题,本文将详细介绍如何使用SpringBoot+SpringSecurity处理Ajax登录请求问题。 ...

    SpringSecurity学习总结源代码

    SpringSecurity是Java开发中用于构建安全Web应用的框架,它提供了强大的身份验证、授权和访问控制功能。在本文中,我们将深入探讨SpringSecurity的核心概念、关键组件以及如何配置和使用这个框架。 首先,Spring...

    SpringSecurity笔记,编程不良人笔记

    SpringSecurity是Java领域中一款强大的安全框架,主要用于Web应用程序的安全管理。它提供了全面的身份验证、授权、会话管理以及安全相关的功能,可以帮助开发者构建安全的Web应用。在本笔记中,我们将深入探讨Spring...

    spring spring security2.5 jar

    Spring Security是Spring生态体系中的一个核心组件,主要负责应用程序的安全性,包括认证和授权。它为Web应用提供了全面的保护,防止未经授权的访问和操作。在版本2.5时,Spring Security已经是一个成熟且功能丰富的...

    springSecurity 实现传参

    Spring Security 是一个强大的和高度可定制的身份验证和访问控制框架,用于Java应用程序。在这个场景中,我们关注的是如何使用Spring Security实现登录验证以及在登录过程中传递参数,特别是记录并返回用户登录前的...

    安全框架Spring Security深入浅出视频教程

    视频详细讲解,需要的小伙伴自行网盘下载,链接见附件,永久有效。 首先,SSM环境中我们通过xml配置的...Springsecurity在两种不同的开发模式中使用,有经典的独立web后台管理系统,也有时下最流行的前后端分离场景。

    最详细Spring Security学习资料(源码)

    Spring Security是一个功能强大且高度可定制的身份验证和授权框架,专门用于保护Java应用程序的安全性。它构建在Spring Framework基础之上,提供了全面的安全解决方案,包括身份验证、授权、攻击防护等功能。 Spring...

    springsecurity原理流程图.pdf

    Spring Security 是一个功能强大且高度可定制的身份验证和访问控制框架,它是安全领域中Spring生态系统的一部分。Spring Security旨在为Java应用程序提供一个全面的安全解决方案,尤其适用于企业级应用场景。它主要...

    精彩:Spring Security 演讲PPT

    ### Spring Security 概述与应用实践 #### 一、引言 在当今互联网时代,网络安全问题日益凸显,尤其是Web应用程序的安全性受到了前所未有的关注。为了应对这些挑战,Spring Security 应运而生,成为了一个非常重要...

    Spring security认证授权

    Spring Security 是一个强大的和高度可定制的身份验证和访问控制框架,用于Java应用程序。它提供了全面的安全解决方案,包括用户认证、权限授权、会话管理、CSRF防护以及基于HTTP的访问控制。在这个例子中,我们将...

    SpringSecurity素材.rar

    SpringSecurity是Java领域中一款强大的安全框架,专为Spring和Spring Boot应用设计,提供全面的安全管理解决方案。在SpringBoot Web开发中,SpringSecurity扮演着核心角色,负责处理身份验证、授权以及访问控制等...

    springboot springsecurity动态权限控制

    在这个“springboot springsecurity动态权限控制”的主题中,我们将深入探讨如何在Spring Boot项目中集成Spring Security,实现动态权限控制,让菜单权限的管理更加灵活和高效。 首先,我们需要理解Spring Security...

Global site tag (gtag.js) - Google Analytics