JAVA开发中的安全配置文件:SecurityConfig.java` (Spring Security 配置文件)

server/2024/12/20 21:19:05/

backend\src\main\java\com\mechanical\erp\config\SecurityConfig.java 是一个 Java 配置文件,用于配置 Spring Security。Spring Security 是一个强大的安全框架,用于保护应用程序的安全性,包括身份验证、授权、会话管理等功能。

文件路径

backend\src\main\java\com\mechanical\erp\config\SecurityConfig.java

文件内容

以下是一个典型的 SecurityConfig.java 文件的示例,展示了如何配置 Spring Security:

java">package com.mechanical.erp.config;import org.springframework.beans.factory.annotation.Autowired;
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.method.configuration.EnableGlobalMethodSecurity;
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.config.http.SessionCreationPolicy;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;import com.mechanical.erp.common.security.service.UserDetailsServiceImpl;
import com.mechanical.erp.common.security.jwt.AuthEntryPointJwt;
import com.mechanical.erp.common.security.jwt.AuthTokenFilter;@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {@AutowiredUserDetailsServiceImpl userDetailsService;@Autowiredprivate AuthEntryPointJwt unauthorizedHandler;@Beanpublic AuthTokenFilter authenticationJwtTokenFilter() {return new AuthTokenFilter();}@Overridepublic void configure(AuthenticationManagerBuilder authenticationManagerBuilder) throws Exception {authenticationManagerBuilder.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder());}@Bean@Overridepublic AuthenticationManager authenticationManagerBean() throws Exception {return super.authenticationManagerBean();}@Beanpublic PasswordEncoder passwordEncoder() {return new BCryptPasswordEncoder();}@Overrideprotected void configure(HttpSecurity http) throws Exception {http.cors().and().csrf().disable().exceptionHandling().authenticationEntryPoint(unauthorizedHandler).and().sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and().authorizeRequests().antMatchers("/api/auth/**").permitAll().anyRequest().authenticated();http.addFilterBefore(authenticationJwtTokenFilter(), UsernamePasswordAuthenticationFilter.class);}
}

解释

1. 包声明
java">package com.mechanical.erp.config;

这行代码声明了该类所在的包路径。

2. 导入语句
java">import org.springframework.beans.factory.annotation.Autowired;
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.method.configuration.EnableGlobalMethodSecurity;
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.config.http.SessionCreationPolicy;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;import com.mechanical.erp.common.security.service.UserDetailsServiceImpl;
import com.mechanical.erp.common.security.jwt.AuthEntryPointJwt;
import com.mechanical.erp.common.security.jwt.AuthTokenFilter;

这些导入语句引入了必要的 Spring Security 类和自定义服务类。

3. 类声明
java">@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
  • @Configuration: 表明该类可以提供 Spring 配置。
  • @EnableWebSecurity: 启用 Spring Security 的 Web 安全支持。
  • @EnableGlobalMethodSecurity(prePostEnabled = true): 启用方法级别的安全性注解(如 @PreAuthorize, @PostAuthorize 等)。
  • extends WebSecurityConfigurerAdapter: 继承 WebSecurityConfigurerAdapter 以自定义安全配置。
4. 自动注入依赖
java">@Autowired
UserDetailsServiceImpl userDetailsService;@Autowired
private AuthEntryPointJwt unauthorizedHandler;
  • UserDetailsServiceImpl: 实现用户详细信息服务。
  • AuthEntryPointJwt: 处理未经授权的请求。
5. Bean 定义
java">@Bean
public AuthTokenFilter authenticationJwtTokenFilter() {return new AuthTokenFilter();
}@Bean
@Override
public AuthenticationManager authenticationManagerBean() throws Exception {return super.authenticationManagerBean();
}@Bean
public PasswordEncoder passwordEncoder() {return new BCryptPasswordEncoder();
}
  • AuthTokenFilter: JWT 过滤器,用于处理 JWT 认证。
  • AuthenticationManager: 提供认证管理器 bean。
  • PasswordEncoder: 密码编码器,使用 BCrypt 加密密码。
6. 配置认证管理器
java">@Override
public void configure(AuthenticationManagerBuilder authenticationManagerBuilder) throws Exception {authenticationManagerBuilder.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder());
}
  • configure(AuthenticationManagerBuilder): 配置认证管理器,使用 UserDetailsServiceImplBCryptPasswordEncoder
7. 配置 HTTP 安全
java">@Override
protected void configure(HttpSecurity http) throws Exception {http.cors().and().csrf().disable().exceptionHandling().authenticationEntryPoint(unauthorizedHandler).and().sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and().authorizeRequests().antMatchers("/api/auth/**").permitAll().anyRequest().authenticated();http.addFilterBefore(authenticationJwtTokenFilter(), UsernamePasswordAuthenticationFilter.class);
}
  • cors().and().csrf().disable(): 禁用 CORS 和 CSRF 保护。
  • exceptionHandling().authenticationEntryPoint(unauthorizedHandler): 设置未授权处理器。
  • sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS): 使用无状态会话管理。
  • authorizeRequests().antMatchers("/api/auth/").permitAll()**: 允许 /api/auth/** 路径下的所有请求。
  • anyRequest().authenticated(): 其他所有请求需要认证。
  • addFilterBefore(authenticationJwtTokenFilter(), UsernamePasswordAuthenticationFilter.class): 在 UsernamePasswordAuthenticationFilter 之前添加 JWT 过滤器。

示例解释

以下是一个更详细的 SecurityConfig.java 文件示例,包含更多的配置选项:

java">package com.mechanical.erp.config;import org.springframework.beans.factory.annotation.Autowired;
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.method.configuration.EnableGlobalMethodSecurity;
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.config.http.SessionCreationPolicy;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;import com.mechanical.erp.common.security.service.UserDetailsServiceImpl;
import com.mechanical.erp.common.security.jwt.AuthEntryPointJwt;
import com.mechanical.erp.common.security.jwt.AuthTokenFilter;@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true,securedEnabled = true,jsr250Enabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {@AutowiredUserDetailsServiceImpl userDetailsService;@Autowiredprivate AuthEntryPointJwt unauthorizedHandler;@Beanpublic AuthTokenFilter authenticationJwtTokenFilter() {return new AuthTokenFilter();}@Overridepublic void configure(AuthenticationManagerBuilder authenticationManagerBuilder) throws Exception {authenticationManagerBuilder.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder());}@Bean@Overridepublic AuthenticationManager authenticationManagerBean() throws Exception {return super.authenticationManagerBean();}@Beanpublic PasswordEncoder passwordEncoder() {return new BCryptPasswordEncoder();}@Overrideprotected void configure(HttpSecurity http) throws Exception {http.cors().and().csrf().disable().exceptionHandling().authenticationEntryPoint(unauthorizedHandler).and().sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and().authorizeRequests().antMatchers("/api/auth/**").permitAll().antMatchers("/api/test/**").permitAll().anyRequest().authenticated();http.addFilterBefore(authenticationJwtTokenFilter(), UsernamePasswordAuthenticationFilter.class);}
}

总结

  • SecurityConfig.java (Spring Security 配置文件):
    • 目的: 配置 Spring Security 以保护应用程序的安全性。
    • 内容: 包含认证管理器、密码编码器、HTTP 安全配置等。
    • 作用: 确保应用程序的安全性,包括身份验证、授权、会话管理等功能。

http://www.ppmy.cn/server/151786.html

相关文章

APP测试中ios和androis的区别,有哪些注意点

一、运行机制不同 IOS采用的是沙盒运行机制,安卓采用的是虚拟机运行机制。 1、沙盒机制: 概念:沙盒是一种安全机制,用于防止不同应用之间互相访问 作用:就是存储数据,每个沙盒就相当于每个每个应用的系…

Airborne使用教程

1.安装环境 前提条件:系统已安装Ruby 打开终端输入如下命令 gem install airborne 或者在Gemfile添加 gem airborne 然后运行bundle install 2.编写脚本 在项目中新建api_tests_spec.rb文件 以GET接口"https://www.thunderclient.com/welcome"为…

C# 字符串拼接的 7 种方式及性能对比

简介 C# 提供多种字符串拼接方式,每种方式在性能和可读性上都有其特点。 方法 使用 号直接拼接 最简单直观的方式,用于拼接少量字符。 string str1 "Hello"; string str2 "World"; string result str1 " " str2;…

家校通小程序实战教程10部门管理前后端连接

目录 1 加载后端的数据2 为什么不直接给变量赋值3 保存部门信息4 最终的效果5 总结 现在部门管理已经完成了后端功能和前端开发,就需要在前端调用后端的数据完成界面的展示,而且在录入部门信息后需要提交到数据库里,本篇我们介绍一下前后端如…

linux CentOS系统上卸载docker

一、停止Docker服务 首先,需要停止Docker服务。使用systemctl命令来停止Docker服务: bash复制代码sudo systemctl stop docker二、卸载Docker软件包 接下来,使用CentOS的包管理器yum来卸载Docker软件包。根据安装的Docker版本和组件&#…

Java 初学者的第一个 SpringBoot3.4.0 登录系统

Java 初学者的第一个 SpringBoot3.4.0 登录系统 SpringBoot 3.4.0 是 SpringBoot 的最新版本,是乐衷与新技术的 Java 初学者和程序员的选择。和 SpringBoot3.4.0 搭配的各种软件组件也是新的潮流。Java 通用代码生成器光,2.4.0 电音之王尝鲜版十支持新的…

在Linux系统中, 查询mysql

在Linux系统中,MySQL的启动文件通常位于/etc/init.d目录下,文件名通常以mysql或者mysqld开头。你可以使用以下命令来查找MySQL的启动脚本: sudo find / -name "mysql*" -type f 这个命令会搜索整个文件系统来找到所有以mysql开头…

.NET 技术 | 调用系统API创建Windows服务

01阅读须知 此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失&#xf…