集中式整合之编写SpringSecurity配置类|学习笔记

简介: 快速学习集中式整合之编写SpringSecurity配置类

开发者学堂课程【Spring Security知识精讲与实战演示(三)集中式整合之编写SpringSecurity配置类】学习笔记与课程紧密联系,让用户快速学习知识

课程地址https://developer.aliyun.com/learning/course/732/detail/13061


集中式整合之编写SpringSecurity配置类

 

1. 目前已经将jsp页面导入到当前项目中了,但是jsp页面是不能

够被springsecurity所识别的,要想被识别,就要通过配置的方式告诉它。

以前的配置方式是在配置文件中去写,但是springboot一般情况下是把重要的一些特殊的app配置在配置文件中,其余的都是以配置类的方式去配置,所以这里需要编写一个配置类。

2. 在com.itheima的基础之上建立一个子包

config.securityconfig,首先加一个注解configuration来指定当前这个类是配置类,这个相当于是一个入口是必须要加的,如果不加的话,组件扫描是不能识别当前这个类的。

image.png

在这里配置的都是springsecurity相关的注解和相关的配置,要想实现配置,就要添加enablewebsecurity注解,必须要加这个注解才能实现springsecurity的配置。

加了这个注解之后,看一下注解的详细内容,里面提到,只要加了这个注解,当前这个类需要实现一个接口或者继承一个类,一般情况下会选择继承一个类。继承了这个类之后,就有了springsecurity的所有默认配置。里面可以不写东西,如果里面不写东西,配置类也在起作用。

image.png

如果要写就要修改配置,要修改配置就要重写配置方法,首先要说明认证用户的来源,可以是内存或数据库,这里先定义内存。

3. 接下来要配置springsecurity的配置信息,类似于提供的专门的

springsecurity的配置文件。

这里需要用到两个方法,第一个是protect viod,将其改为public void,第二个同名但是内容不同(HttpSecurity http),同样也改为public。

第一个用auth,可以根据其中文意思判断其功能,选择使用内存,在内存中使用的话可以写withuser,里面备注用户名。

下面写password,里面备注123,需要注意的是:如果直接写123,springsecurity会认为它是一个密文,但这里123是个原文,只需在123前面加一个{noop}就可以使springsecurity知道123是个原文了。

继续写roles,用户必须有角色,没有角色的用户是没有意义的,springsecurity全凭这个角色进行授权认证,这里命名为USER,如果在配置类中指定角色的话,不要加前缀,否则就会报错。上述工作指定了认证用户的来源,这里先不连接数据库。

4. 配置springsecurity的相关信息时,首先需要释放静态资源,还

要指定资源拦截规则(访问哪些资源需要哪些角色需要说明),还需指定自定义认证页面,指定退出认证配置,csrf配置,顺着这个顺序写程序。

(1) 释放静态资源。首先全部都以http.authorizeRequests作为

开始,接下来有一个anMatchers指定路径,先来释放静态资源,里面可以写多个,释放login.jsp可以匿名访问,释放failer.jsp,释放css,还有img,plugins,到此,所有需要释放的资源即不需要让springsecurity拦截的资源,列出来之后再写一个permitALL

(2) 指定路径拦截资源,同样也是anMatchers,在这里边写上一

个路径如/**,这是指所有的资源都需要一个角色,可以选择hasAnyRole或者hasRole,一个是多个角色一个是一个角色;也可以用ac,写spring的表达式,但是这样写没有直接写hasrole简便。这里选择hasAnyRole,里面写USER,ADMIN,其他的资源可以写为anyResquest,要求它必须认证才能访问,写为authenticated,表示其它资源只有认证之后才能访问。

(3) 指定自定义配置页面,加一个and表示新的开始,里面写

formlogin,配置和以前类似,需要指定一个loginpage,验证页面是login.jsp。指定log的url地址,这个地址就是login,不需要做任何改动,是springsecurity提供好的。

接下来再指定一个success,成功之后使其来到index.jsp;万一失败的话就来到failer.jsp。最后再写一个peimitALL,将上面的所有资源都释放了。

(4) 接下来做指定推出认证的配置,同样写一个and表示一个新

的开始。

写一个logout,先写一个logoutUrl,再写一个logoutSuccessUrl,说明输出成功之后去哪,成功之后就跳转到login.jsp。接下俩要说明是否提供session,里面写true,与之前一样,也要加一个permitAll,否则logout会被拦截。

(5) 继续进行csrf的配置,依旧写一个and,直接结束也可以,

但是如果不写这个,所有请求都必须携带springsecurity内部生成的随机topic。

为了测试方便,这里将csrf的资源释放掉,与之前一样,不让它起作用就可以,使用disable语句。如果这部分不加的话测试的时候就要加随机topic。

完整程序:

package com itheimm.config;

import org. springframework.context.annotation.

Configuration;

import org. springframework.security. config.

annotation.web.configuration. EnableWebSecurity;

import org.springframework.security.config.annotation web.configuration.WebSecurityConfigurerAdapter;

@Configuration

@EnableWebSecurity

public class SecurityConfig extends WebSecurity

ConfigurerAdapter {

//认证用户的来源【内存或数据库】

public void configure(AuthenticationManagerBuilder auth) throws Exception{

auth. inMemoryAuthentication()

.withUser( username: "user”)

.password(“{noop}123”)

.roles("USER”);

//配置 springSecurity 相关信息

public void configure(HttpSecurity http) throws Exception{

//释放静态资源,指定资源拦截规则,指定自定义认证页面,指定退出认证配置,csrf 配置

http.authorizeRequests() ExpressionlnterceptUrlRegistry

.antMatchers( …antPatterns:"/login.jsp", "/failer.jsp", "/css/**”,”img/**”,”/plugins/**").permitA11()

.antMatchers( ..antPatterns:"/**").hasAnyRole( ..roles:“USER","ADMIT”)

.anyRequest

.authenticated()

.and()

.formLogin()

. loginPage("/login. jsp”)

.loginProcessingUrl("/login"

.successForwardUrl("/index.jsp")

.failureForwardUrl("/failer.jsp")

.permitAll()

.and()

.logout ()

.logoutUrl("/logout")

.logoutSuccessUrl("/login. jsp")

.invalidateHttpSession(true)

.permitAll()

.and ()

.csrf()

.disable()

}}

相关文章
|
2月前
|
JSON 前端开发 Java
SpringBoot3怎么做统一结果封装?
在Spring Boot应用中,统一结果封装有助于团队协作,确保一致的API响应格式,提升代码质量和维护性。主要优点包括:简化前端集成工作,减少后端重复编码,以及增强接口的可维护性。实现上,首先定义`Result`类来封装响应状态码、消息、数据及时间戳;其次,通过`ResultCode`枚举类标准化状态信息。示例代码展示了如何构建这些类,并通过一个简单的控制器方法演示了如何使用它们返回JSON格式的响应结果。
|
2月前
|
存储 SQL Java
|
4月前
|
搜索推荐 前端开发 JavaScript
SpringBoot静态资源访问控制和封装集成方案
该文档描述了对基于SpringBoot的项目框架进行优化和整合的过程。原先采用前后端分离,后端兼做前端,但随着项目增多,升级维护变得复杂。因此,决定整合后台管理页面与后端代码,统一发布。设计上,框架包含后台管理资源,项目则配置具体业务页面,项目可通过覆盖框架资源实现个性化。关键步骤包括:自定义静态资源访问路径、解决图标与字体文件访问问题、设定自定义欢迎页面和页面图标,以及确保项目能正确访问框架静态资源。通过扫描jar包、解压和拷贝资源到项目目录,实现了框架静态资源的动态加载。此外,调整静态资源访问优先级,保证正确加载。最终实现支持jar和war包的项目结构优化。
103 4
|
5月前
|
Java Shell 测试技术
环境切换大法:掌握Spring Boot多套配置与@Profile注解的高级技巧
环境切换大法:掌握Spring Boot多套配置与@Profile注解的高级技巧
115 2
环境切换大法:掌握Spring Boot多套配置与@Profile注解的高级技巧
|
5月前
|
存储 安全 Java
20个SpringSecurity框架核心组件源码详解
以上是 V 哥给大家整理的20个Spring Security 中核心组件的分析与运行过程,理解后可助你玩转Spring Security,如果文章对你有帮助,客官请点赞收藏转发给更多需要的兄弟,任何疑问请评论区与V哥交流。
|
存储 设计模式 前端开发
“深入理解自定义MVC:构建灵活可定制的Java应用程序”
“深入理解自定义MVC:构建灵活可定制的Java应用程序”
47 0
|
安全
springsecurity配置类以及授权逻辑的编写
springsecurity配置类以及授权逻辑的编写
97 0
|
存储 SQL 数据库
SpringSecurity基础-记住我功能实现
Remember me(记住我)记住我,当用户发起登录勾选了记住我,在一定的时间内再次访问该网站会默认登录成功,即使浏览器退出重新打开也是如此,这个功能需要借助浏览器的cookie实现,具体流程如下
72 0
|
存储 SQL 数据库
七.SpringSecurity基础-记住我功能实现
SpringSecurity基础-记住我功能实现
|
消息中间件 缓存 JavaScript
这16个有用的 SpringBoot 扩展接口,居然还有人不知道?
这16个有用的 SpringBoot 扩展接口,居然还有人不知道?