springboot 集成spring security后 url拦截问题

springboot 集成spring security后 url拦截问题,第1张

AbstractAccessDecisionManager的子类使用了decide这个方法,你需要看AbstractAccessDecisionManager里面对于voter的结果如何处理的

比如UnanimousBasedclass

```

for (ConfigAttribute attribute : attributes) {

singleAttributeListset(0, attribute);

for (AccessDecisionVoter voter : getDecisionVoters()) {

int result = votervote(authentication, object, singleAttributeList);

if (loggerisDebugEnabled()) {

loggerdebug("Voter: " + voter + ", returned: " + result);

}

switch (result) {

case AccessDecisionVoterACCESS_GRANTED:

grant++;

break;

case AccessDecisionVoterACCESS_DENIED:

throw new AccessDeniedException(messagesgetMessage(

"AbstractAccessDecisionManageraccessDenied",

"Access is denied"));

default:

abstain++;

break;

}

}

}

// To get this far, there were no deny votes

if (grant > 0) {

return;

}

```

主要看这边处理的

在上篇文章《SpringBoot应用启动原理(一) 将启动脚本嵌入jar》中介绍了SpringBoot如何将启动脚本与Runnable Jar整合为Executable Jar的原理,使得生成的jar/war文件可以直接启动

本篇将介绍SpringBoot如何扩展URLClassLoader实现嵌套jar的类(资源)加载,以启动我们的应用。

首先,从一个简单的示例开始

buildgradle

WebAppjava

执行 gradle build 构建jar包,里面包含 应用程序 第三方依赖 以及SpringBoot 启动程序 ,其目录结构如下

查看MANIFESTMF的内容(MANIFESTMF文件的作用请自行GOOGLE)

可以看到,jar的启动类为 orgspringframeworkbootloaderJarLauncher ,而并不是我们的 commanerfanSpringBoottheoryWebApp ,应用程序入口类被标记为了Start-Class

jar启动并不是通过应用程序入口类,而是通过JarLauncher代理启动。其实SpringBoot拥有3中不同的Launcher: JarLauncher 、 WarLauncher 、 PropertiesLauncher

SpringBoot使用Launcher代理启动,其最重要的一点便是可以自定义ClassLoader,以实现对jar文件内(jar in jar)或其他路径下jar、class或资源文件的加载

关于ClassLoader的更多介绍可参考 《深入理解JVM之ClassLoader》

SpringBoot抽象了Archive的概念,一个Archive可以是jar(JarFileArchive),可以是一个文件目录(ExplodedArchive),可以抽象为统一访问资源的逻辑层。

上例中,spring-boot-theory-100jar既为一个JarFileArchive,spring-boot-theory-100jar!/BOOT-INF/lib下的每一个jar包也是一个JarFileArchive

将spring-boot-theory-100jar解压到目录spring-boot-theory-100,则目录spring-boot-theory-100为一个ExplodedArchive

按照定义,JarLauncher可以加载内部 /BOOT-INF/lib 下的jar及 /BOOT-INF/classes 下的应用class

其实JarLauncher实现很简单

其主入口新建了JarLauncher并调用父类Launcher中的launch方法启动程序

再创建JarLauncher时,父类ExecutableArchiveLauncher找到自己所在的jar,并创建archive

在Launcher的launch方法中,通过以上archive的getNestedArchives方法找到/BOOT-INF/lib下所有jar及/BOOT-INF/classes目录所对应的archive,通过这些archives的url生成LaunchedURLClassLoader,并将其设置为线程上下文类加载器,启动应用

至此,才执行我们应用程序主入口类的main方法,所有应用程序类文件均可通过/BOOT-INF/classes加载,所有依赖的第三方jar均可通过/BOOT-INF/lib加载

在分析LaunchedURLClassLoader前,首先了解一下URLStreamHandler

java中定义了URL的概念,并实现多种URL协议(见 URL ) >

1、问题

在前后端分离的环境下进行项目开发,前台通过url请求后台的接口时,需要进行跨域,如果后台项目有很多 Controller 控制器,需要在每个 Controller 控制器的类上都添加 @CrossOrigin 跨域注解,这样就会显得重复。在Spring Boot项目中,可以配置全局跨域。

2、解决方法

创建一个跨域的配置类 CorsConfigjava ,然后通过 @Configuration 注解将该类交给Spring容器进行管理和生效。

如果您有什么好的想法与方法,欢迎在评论区留言,我们一起讨论~

query params就是最简单的问号传参方式,而spring接受参数方式有以下几种不需要额外第三方包。

前端传参:

后台接收:

统一资源定位符(又称URL)是一种资源命名或定位格式,用于指定或寻址资源。 URL在Web上非常流行,在Web上使用URL格式寻址或标识网站和Web资源。

2000年Roy Fielding博士在其博士论文中提出REST(Representational State Transfer)风格的软件架构模式后,REST就基本上迅速取代了复杂而笨重的SOAP,成为Web API的标准了。

RESTful作为目前最流行的 API 设计规范,一定有着它独有的魅力:强大、简介、易上手。

前端传参:

后台接收:

以前的form表单和formData是ajax20( XML>

以上就是关于springboot 集成spring security后 url拦截问题全部的内容,包括:springboot 集成spring security后 url拦截问题、SpringBoot应用启动原理(二) 扩展URLClassLoader实现嵌套jar加载、Spring Boot 全局跨域配置等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9698827.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)