Spring Security的简单介绍与案例

1,261 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第9天,点击查看活动详情

引言

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可以很容易地构建出安全的应用程序。