引言
Spring Security是一个功能强大的安全框架,旨在为Java应用程序提供身份验证和授权功能。它可以很容易地整合到Spring应用程序中,并支持多种身份验证方法,包括基于表单的身份验证、基于HTTP的身份验证以及基于OAuth 2.0的身份验证。
依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
第一个例子
要在Spring应用程序中使用Spring Security,首先需要在项目中添加Spring Security的依赖。
然后,可以使用@EnableWebSecurity注解启用Web安全性,并通过编写WebSecurityConfigurer接口的实现来配置安全规则。例如,可以使用以下代码配置基于表单的身份验证:
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.formLogin()
.loginPage("/login")
.permitAll();
}
}
在这段代码中,我们启用了基于表单的身份验证,并指定了登录页面的URL。这意味着用户在访问受保护的资源时,会被重定向到登录页面,并在登录成功后才能访问这些资源。
Spring Security还提供了其他一些有用的功能,例如用户角色和权限的管理、密码加密以及安全传输。使用Spring Security可以很容易地为应用程序提供强大的安全的检查。
拦截后与登录
我们在拦截请求后如果不指定会默认跳到一个# Spring Security提供的登陆界面
我们输入账号user
同时在控制台中找到生成的密码,即可完成登录。
一个小demo
package com.example.demospringsecurity;
import org.springframework.beans.factory.annotation.Configurable;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.password.NoOpPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
@Configuration
@EnableWebSecurity
public class WebSecurityConfigurer extends WebSecurityConfigurerAdapter {
@Bean
PasswordEncoder passwordEncoder() {
return NoOpPasswordEncoder.getInstance();
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication()
.withUser("lyy")
.password("123456").roles("admin", "user")
.and()
.withUser("security")
.password("security").roles("user");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests() //开启配置
.antMatchers("/cxyxj/**").hasRole("admin") //访问/cxyxj/**下的路径,必须具备admin身份
.antMatchers("/security/**").hasRole("user") //访问/security/**下的路径,必须具备user身份
.antMatchers("/permitAll").permitAll() // 访问/permitAll路径,不需要登录
.anyRequest() //其他请求
.authenticated()//验证 表示其他请求只需要登录就能访问
.and()
.formLogin() // 开启表单登陆
.loginPage("自定义的拦截后跳转的界面");
}
@Bean
@Override
protected AuthenticationManager authenticationManager() throws Exception {
return super.authenticationManagerBean();
}
}
上面的demo中,我们重写了一些方法,并为其添加了如Configuration,Bean的注解。
我们完成了自定义页面的跳转和自定义密码,并且为一些页面设置了需要鉴别的权限。
最后
在使用Spring Security时,还可以使用许多其他功能来提高应用程序的安全性。例如,可以使用Spring Security的内置加密功能对用户密码进行加密。这样,即使在数据库被黑客入侵的情况下,用户的密码也无法被直接读取。
此外,还可以使用Spring Security的访问控制功能,根据用户角色或权限来控制对应用程序资源的访问。例如,可以设置某些资源仅对管理员可见,而对普通用户隐藏。
此外,Spring Security还提供了许多其他安全功能,例如安全传输、跨站请求伪造保护以及身份验证和授权的扩展功能。使用这些功能,可以构建出更加安全的应用程序。
总的来说,Spring Security是一个功能强大的安全框架,可以为Java应用程序提供身份验证和授权功能,同时还提供了许多其他安全功能。使用Spring Security可以很容易地构建出安全的应用程序。