SSO单点登录,Cookie,自定义注解,AOP

一、Cookie

 

    cookie和session的区别

 

    cookie是一种浏览器保存数据的技术,有大小限制,通常最大限度是4KB,因此cookie不适合用来存储大量的数据。

 

    常用方法:

        cookie.setMaxAge(); - 设置cookie的过期时间,如果不设置的话,cookie默认过期时间是浏览器关闭的时候

 

        cookie.setPath(); - 设置cookie的有效路径,简单来说,当浏览器发送给服务器的请求路径中携带改路径,cookie才能发送给服务器,否则服务器收不到该cookie。温馨提示,在设置cookie时,通常将这个属性设置为“/”

 

        cookie.setDomain(); - 设置cookie有效的域名地址,如果访问的服务器地址,域名不同,则不会携带cookie到服务器。因此这个属性通常设置为二级域名共享的模式(比如 .jd.com)注意:cookie只能二级域名共享,一级域名不能共享cookie

 

        cookie.setHttpOnly(); - 该属性用来设置cookie是否只能通过http请求获取。如果设置为true之后,服务器仍然可以获得cookie值,但是浏览器的js(document.cookie)就没办法再获得该cookie,增加cookie的安全性

 

        cookie.setSecure(); - 该属性设置为true之后,只有https请求才会携带该cookie,极大的提高了cookie安全性。

 

            xss - 跨域脚本攻击

            

 

            crsf - 跨域方法攻击

            

 

 

    问题:cookie没办法进行一级域名的跨域,一级域名如何进行单点登录?

 

 

二、请求跨域问题

 

    什么是请求跨域?

        

        如果控制台打印以上内容,就说明发生了请求跨域。请求跨域是浏览器的一种安全限制行为,当前页面只能发送请求给同源的服务器。如果发送请求给非同源服务器,那么就会发送所谓的跨域问题。

 

    什么是同源?

        同协议、同ip、同端口,就称之为同源

 

    跨域的特点:

        · 跨域是浏览器的行为,不是服务器的行为

        · 浏览器规定了一些标签,不受跨域限制(<from>、<img>、<script>、<link>....)

        · 浏览器跨域限制是为了安全起见

 

    如何解决跨域问题?

        · 所有页面只访问同源的服务器,然后由服务器内部调用其他服务器获得数据返回给页面

            

 

        · jQuery - jsonp

            

 

            jsonp的实现:

            

 

            jsonp的特点:通过jsonp跨域访问,会携带浏览器的cookie

 

 

        · SpringMVC的跨域解决方案

            

            原理:SpringMVC的方法添加该注解后,会自动的在响应头上,添加一个属性

                一旦浏览器,发现响应头中包含该属性,就不会限制该请求的跨域了

 

 

三、自定义注解

 

        如何自定义一个注解:

            public @interfae 注解名 {

                //N个抽象方法

            }

 

        了解自定义注解的4个元注解(标记注解的注解):

            @Documented:当前注解能够被JavaDoc标记

 

            @Target:标记当前注解的作用范围

                ElementType.ANNOTATION_TYPE - 表示当前注解可以标记在其他注解之上

                ElementType.CONSTRUCTOR - 表示当前注解可以标记在构造方法之上

                ElementType.FIELD - 表示当前注解可以标记在属性(成员变量)之上(常用)

                ElementType.LOCAL_VARIABLE - 表示当前注解可以标记在局部变量之上

                ElementType.METHOD - 表示当前注解可以标记在方法上(常用)

                ElementType.PACKAGE - 标记在包上

                ElementType.PARAMETER - 标记在方法的形参列表上(常用)

                ElementType.TYPE - 标记在类、接口、内部类以及枚举类上(常用)

 

            @Retention:标记当前注解的有效范围

                RetentionPolicy.SOURCE - 当前范围表示注解只能作用在源码上,一旦编译成.class文件,注解会丢失

                RetentionPolicy.CLASS - 当前范围表示注解只能在源码和字节码文件上,一旦运行就会丢失

                RetentionPolicy.RUNTIME - 当前注解可以作用在源码、字节码以及运行时状态。简单来说,如果需要通过反射操作注解,则注解的有效范围必须是RUNTIME

 

        自定义注解的方法声明:

 

            语法:

                返回值 方法名() [default 默认值];

 

            注意:

                1、注解中的方法不能有形参列表

                2、如果注解中的方法没有设定默认值,则标记注解时,必须指定该方法的返回值

                3、如果一个方法名是value,则标记方法时可以省略方法名

                4、如果标记注解需要设置两个以上的方法返回值,则value不能省略

                5、方法返回值可以是数组,如果只给数组一个值,那么可以省略大括号

 

四、AOP

 

    什么是AOP?

        面向切面编程

 

    AOP的底层原理:动态代理

 

    AOP的运用场景:

        1、分布式环境下,判断当前业务是否已经登录

        2、事务管理(Spring自带)

        3、用户轨迹记录

 

    SpringBoot如何使用AOP

 

        1)添加依赖

            <dependency>

                <groupId>org.springframework.boot</groupId>

                <artifactId>spring-boot-starter-aop</artifactId>

            </dependency>

 

        2)准备一个切面类(方法增强)

            

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值