1.1    SpringSecurity技术简介与使用

1.1.1     简介

Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。所有的操作都是以配置的形式操作。

1.1.2     使用

1.       导入依赖

<!-- security身份验证 -->

<dependency>

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

<artifactId>spring-security-web</artifactId>

</dependency>

<dependency>

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

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

</dependency>

2.       配置web.xml文件

<!-- springSecurity使用 -->

<context-param>

<param-name>contextConfigLocation</param-name>

<param-value>classpath:spring/spring-*.xml</param-value>

</context-param>

<listener>

<listener-class>

org.springframework.web.context.ContextLoaderListener

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

注意:其实springsecurity框架中所有的功能实现都是通过过滤器,那么我们过滤器的拦截形式有以下几种

全目录 /

后缀 *.do

通配符 /开头

经典错误:/*.do

3.       配置spring-security.xml文件

<?xml version="1.0" encoding="UTF-8"?>

<beans:beans xmlns="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.xsd

                  http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security.xsd">

   <!-- 以下页面不被拦截 -->

   <http pattern="/login*.html" security="none"/>

   <http pattern="/css/**" security="none"/>

   <http pattern="/img/**" security="none"/>

   <http pattern="/js/**" security="none"/>

   <http pattern="/plugins/**" security="none"/>

  

   <!-- 页面拦截规则

      use-expressions:默认是true,我们配置false,可以在 access直接写角色权限ROLE_USER

                  否则形式为 "hasRole('ROLE_USER')"

      intercept-url:表示拦截形式     /** 和  /*

      access:角色名称必须  以 "ROLE_*" 开头

    -->

   <http use-expressions="false">

      <intercept-url pattern="/**" access="ROLE_ADMIN" />

      <!-- 开启表单验证: security会自动生成一个验证的表单页面-->

      <form-login

         login-page="/login.html"

         default-target-url="/admin/index.html"

         always-use-default-target="true"

         authentication-failure-url="/login.html"

      />

      <!-- 关闭csrf 校验认证 -->

      <csrf disabled="true"/>

      <!-- 解决 in a frame because it set 'X-Frame-Options' to 'deny' 页面无显示问题

         约定   >  配置  >  编码

      -->

      <headers>

         <frame-options policy="SAMEORIGIN"/>

      </headers>

      <!-- 退出登录     -->  

      <logout/>

   </http>

   <!-- 认证管理器 -->

   <authentication-manager>

      <!-- 认证的提供者 -->

      <authentication-provider>

         <user-service>

            <user name="admin" password="123456" authorities="ROLE_ADMIN"/>

            <user name="sunwukong" password="dasheng" authorities="ROLE_ADMIN"/>

         </user-service>    

      </authentication-provider>

   </authentication-manager>

</beans:beans>

1.2        工作中遇到的这些问题

1.       自定义登陆页面出现以下问题

security="none"  设置此资源不被拦截.

如果你没有设置登录页security="none"  ,将会出现以下错误

分析问题:

因为登录页会被反复重定向。

如何解决:将login相关的页面放行

<http pattern="/login*.html" security="none"/>

2.       csrf disabled="true"  关闭csrf ,如果不加会出现错误

分析:

CSRF(Cross-site request forgery)跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。

使用Secuirty 3或更老的版本, 升级到4.0或之后的版本, Security将默认启用CSRF, 可防止跨站请求伪造登录, 或是用机器登录

若不需要CSRF的场景(如对外的API接口), 可在Security配置中关闭

解决<http中配置

<csrf disabled="true"/>

3.       登陆成功后会出现 in a frame because it set 'X-Frame-Options' to 'deny' 页面无显示问题

分析:

页面的返回头被设置 X-Frame-Options SAMEORIGIN ,只能被同源的iframe 引用。跨域名的iframe 没法显示了。

解决:在<http中配置

   <headers>

      <frame-options policy="SAMEORIGIN"/>

   </headers>

4.   启动报错org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 49 in XML document from class path resource [spring-security.xml] is invalid; nested exception is org.xml.sax.SAXParseException; lineNumber: 49; columnNumber: 49; 元素 "dubbo:application" 的前缀 "dubbo" 未绑定。

分析:

Xml中没有引入标签,xml中配置中无法读取到dubbo相关的中配置的文件

解决:在spring-security.xml中添加

xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"

xsi:schemaLocation="http://www.springframework.org/schema/beans

http://code.alibabatech.com/schema/dubbo           http://code.alibabatech.com/schema/dubbo/dubbo.xsd

SpringSecurity的更多相关文章

  1. spring mvc 和spring security配置 spring-servlet.xml和spring-security.xml设置

    spring-servlet.xml配置 <?xml version="1.0" encoding="UTF-8"?> <beans xmln ...

  2. 【JavaWeb】Spring+SpringMVC+MyBatis+SpringSecurity+EhCache+JCaptcha 完整Web基础框架(前言)

    一直希望能够搭建一个完整的,基础Web框架,方便日后接一些外快的时候,能够省时省力,终于花了一周的时间,把这个东西搞定了.特此写下此博客,一来是纪念,二来是希望能够为别人提供方便.顺带说一下,恩,组合 ...

  3. 【JavaWeb】SSM+SpringSecurity+EhCache+JCaptcha 完整Web基础框架(六)

    Showings 我个人的项目,当前不断地在更新. 我希望做成一个好项目,同时,也是在锻炼自己的技术. 在项目中发现问题,学习知识,是比较可取的一条路子. 这样学习到的知识,虽然分散,但是都很实用,而 ...

  4. 【JavaWeb】Spring+SpringMVC+MyBatis+SpringSecurity+EhCache+JCaptcha 完整Web基础框架(五)

    SpringSecurity(2) 好久没有写了,之前只写了一半,我是一边开发一边写Blog一边上班,所以真心没有那么多时间来维护Blog,项目已经开发到编写逻辑及页面部分了,框架基本上已经搭建好不会 ...

  5. 【JavaWeb】Spring+SpringMVC+MyBatis+SpringSecurity+EhCache+JCaptcha 完整Web基础框架(四)

    SpringSecurity(1) 其实啊,这部分我是最不想写的,因为最麻烦的也是这部分,真的是非常非常的麻烦.关于SpringSecurity的配置,让我折腾了好半天,网上的配置方式一大把,但总有一 ...

  6. 【JavaWeb】Spring+SpringMVC+MyBatis+SpringSecurity+EhCache+JCaptcha 完整Web基础框架(一)

    Spring+MyBatis 首先要搭建的是Spring+MyBatis的整合框架,毕竟Spring是整个Web框架的核心部位,而数据库操作是一切测试的基础嘛. 目录结构 ━java ┣ contro ...

  7. SSO单点登录Spring-Security & CAS使用手册

    1.1概述 1.1.1单点登录介绍 单点登录(Single Sign On , 简称 SSO )是目前比较流行的服务于企业业务整合的解决方案之一, SSO 使得在多个应用系统中,用户只需要登录一次就可 ...

  8. spring4.2.3+mybatis+spring-security配置文件

    1.web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi=&qu ...

  9. springmvc+spring-security+mybatis +redis +solar框架抽取

    参考文章:Spring MVC 3 深入总结: 第二章 Spring MVC入门 —— 跟开涛学SpringMVC 参考博客:http://www.cnblogs.com/liukemng/categ ...

  10. 安全框架 SpringSecurity 和 Shiro 对比

    突然再次很想理一下权限的事,但是实在不知道实际情况选哪个框架好,现在整理下网上的资料,做一下对比. 1.Spring-security 对spring 结合较好,如果项目用的springmvc ,使用 ...

随机推荐

  1. Hello Activemq

    0. 如果永远是localhost 可能一直low下去 1.下载安装 activemq 1.1 从官网下载activemq.tar.gz 并上传(rz)到linux系统 并解压 tar zxvf /* ...

  2. 【代码笔记】Java常识性基础补充(二)——数组、ArrayList集合、ASCII编码、 eclipse基础操作、eclipse调试、eclipse项目导入、eclipse快捷键

    1.0 如何定义数组以及访问数组中的元素,如下所示.ArrayDemo01.java public class ArrayDemo01 { public static void main(String ...

  3. C#虚基类继承与接口的区别

    类:定义新的数据类型以及这些新的数据类型进行相互操作的方法 定义方式: class Cat { } class Cat:object { } C#中所有的类都是默认由object类派生来的,显示指定或 ...

  4. Tesseract-OCR -01-Tesseract 介绍

    Tesseract-OCR -01-Tesseract 介绍 OCR(Optical Character Recognition): 光学字符识别,是指对图片文件中的文字进行分析识别,获取的过程 Te ...

  5. Mysql 优化配置2

    服务器物理硬件的优化 来源社区,个人作为收集 在挑选硬件服务器时,我们应该从下面几个方面着重对MySQL服务器的硬件配置进行优化,也就是说将项目中的资金着重投入到如下几处: 1.磁盘寻道能力(磁盘I/ ...

  6. 并发包同步工具CyclicBarrier

    /** * * @描述: 同步工具 * 表示大家彼此等待,大家集合好后才开始出发,分散活动后又在指点地点集合碰合 . * @作者: Wnj . * @创建时间: 2017年5月16日 . * @版本: ...

  7. JDBC事务和数据库事务嵌套的讨论 .

    首先必须执行con.setAutoCommit(false)方法,将JDBC事务设置为手动提交,否则手动提交con.commit()无效,手动回滚con.rollback()引发SQLExceptio ...

  8. Spring-aop实现切面的四种方式(1)

    Spring实现AOP的4种方式 先了解AOP的相关术语:1.通知(Advice):通知定义了切面是什么以及何时使用.描述了切面要完成的工作和何时需要执行这个工作.2.连接点(Joinpoint):程 ...

  9. 重新认识KCP

    什么是KCP KCP是一种网络传输协议(ARQ,自动重传请求),可以视它为TCP的代替品,但是它运行于用户空间,它不管底层的发送与接收,只是个纯算法实现可靠传输,它的特点是牺牲带宽来降低延迟.因为TC ...

  10. July 18th 2017 Week 29th Tuesday

    My heart is stronger now that you are in it. 我的心里有了你,从此变得更强大. You will no longer feel lonely if ther ...