集中式整合之编写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()

}}

相关文章
|
7月前
|
存储 Java 数据安全/隐私保护
|
Java 开发者 Spring
springboot松散绑定
springboot松散绑定
|
Java 应用服务中间件 Maven
解析Spring Boot中的Profile:配置文件与代码的双重掌控
解析Spring Boot中的Profile:配置文件与代码的双重掌控
|
4月前
|
存储 SQL Java
|
6月前
|
缓存 安全 Java
【权限管理系统】Spring security(三)---认证过程(原理解析,demo)
【权限管理系统】Spring security(三)---认证过程(原理解析,demo)
|
7月前
|
Java Shell 测试技术
环境切换大法:掌握Spring Boot多套配置与@Profile注解的高级技巧
环境切换大法:掌握Spring Boot多套配置与@Profile注解的高级技巧
157 2
环境切换大法:掌握Spring Boot多套配置与@Profile注解的高级技巧
|
存储 SQL 数据库
七.SpringSecurity基础-记住我功能实现
SpringSecurity基础-记住我功能实现
|
存储 SQL 数据库
SpringSecurity基础-记住我功能实现
Remember me(记住我)记住我,当用户发起登录勾选了记住我,在一定的时间内再次访问该网站会默认登录成功,即使浏览器退出重新打开也是如此,这个功能需要借助浏览器的cookie实现,具体流程如下
94 0
|
Java Spring
Spring文件第四课SpringIOC 的三种方案利用注解的方式(二)
Spring文件第四课SpringIOC 的三种方案利用注解的方式(二)
99 0
|
Java 程序员 Spring
Spring文件第四课SpringIOC 的三种方案利用注解的方式(一)
Spring文件第四课SpringIOC 的三种方案利用注解的方式(一)
114 0
Spring文件第四课SpringIOC 的三种方案利用注解的方式(一)