reGeorg介绍
reGeorg 的前身是2008年 SensePost 在 BlackHat USA 2008 的 reDuh 延伸与扩展。
reGeorg是reDuh的继承者,利用了会话层的socks5协议,相比较于reDuh效率更高一些。
2025年06月19日
reGeorg 的前身是2008年 SensePost 在 BlackHat USA 2008 的 reDuh 延伸与扩展。
reGeorg是reDuh的继承者,利用了会话层的socks5协议,相比较于reDuh效率更高一些。
2025年06月19日
跨站脚本攻击XSS(Cross Site Scripting),为了不和层叠样式表(Cascading Style Sheets,CSS)的缩写混淆
2025年06月19日
JSON和JSONP虽然只有一个字母的差别, 但其实他们根本不是一回事儿:
JSON是一种数据交换格式, 而JSONP是一种非官方跨域数据交互协议。一个是描述信息的格式, 一个是信息传递的约定方法。
一、JSON对象概述
1、什么是JSON
JSON是一组无序数据的集合, 这个集合是无序属性的集合, 这个集合可以使用键值对进行表述。在内存中表现为一段连续内存的集合。
2025年06月19日
关于定时器setInterval(code, millisecond)和延时器setTimeout(code, millisecond)中第一个参数引号问题思考
对于自定义函数使用双引号必须加上括号;
setInterval("start()", 1000);
setTimeout("start()", 1000);
2025年06月19日
package com.alatus.secrurity.config;
import com.alatus.secrurity.Handler.MyAuthenticationFailureHandler;
import com.alatus.secrurity.Handler.MyAuthenticationSuccessHandler;
import com.alatus.secrurity.Handler.MyLogoutSuccessHandler;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.web.SecurityFilterChain;
import static org.springframework.security.config.Customizer.withDefaults;
@Configuration
//开启Spring Security的自定义配置
@EnableWebSecurity
public class WebSecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http.authorizeHttpRequests((authorize) -> authorize.anyRequest().authenticated());
http.formLogin(formLogin->{
formLogin.loginPage("/login").permitAll()
// 修改自定义的表单参数
.usernameParameter("myUsername")
.passwordParameter("myPassword")
.failureUrl("/login?failure")
.failureHandler(new MyAuthenticationFailureHandler())
// 这里将默认的登录成功handler改为我们自定义的handler
.successHandler(new MyAuthenticationSuccessHandler());
//如果不配置permitAll,就会导致出现login页是初始登录页,但是这个页面资源又收到保护,导致跳转回登录页
//但是登录页又收到保护,于是又要跳转到登录页,就会形成页面递归导致报错
});
http.logout((Logout)->{
Logout.logoutSuccessHandler(new MyLogoutSuccessHandler());
});
http.csrf(csrf->csrf.disable());
return http.build();
}
// @Bean
// public UserDetailsService userDetailsService() {
//// 创建基于内存的用户信息管理器
//// InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();
//// 创建基于数据库的用户信息管理器
// DBUserDetailsManager manager = new DBUserDetailsManager();
//// 创建UserDetails对象,并设置用户名、密码、角色权限等内容
//// 因为用户都在数据库创建保存和查询,所以这里我们使用数据库中的用户信息进行登录验证
//// manager.createUser(User.withDefaultPasswordEncoder().username("admin").password("admin").roles("USER").build());
//// 这里我们的manager对象用于管理我们创建的用户信息
// return manager;
// }
}
2025年06月19日
前面介绍了在项目开发时为什么选择Spring Security,还介绍了它的原理。本节开始动手实践Spring Security的相关技术。
2025年06月19日
Spring Security提供了身份认证,权限认证,防御常见攻击三个功能
保护应用程序URL,要求对应用程序的任何交付都必须进行身份验证
2025年06月19日
它通过一系列的过滤链,层层Filter走下来,最终走到Servlet
正常情况下,这些Filter都需要被注册在我们的Servlet才能够生效
但是为了更灵活的使用,这些Filter将被我们以Bean的形式管理
2025年06月19日
Principal是用户身份信息,Credentials是用户凭证信息(密码),Auth是用户权限
package com.alatus.secrurity.config;
import com.alatus.secrurity.Handler.MyAuthenticationEntryPoint;
import com.alatus.secrurity.Handler.MyAuthenticationFailureHandler;
import com.alatus.secrurity.Handler.MyAuthenticationSuccessHandler;
import com.alatus.secrurity.Handler.MyLogoutSuccessHandler;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.web.SecurityFilterChain;
import static org.springframework.security.config.Customizer.withDefaults;
@Configuration
//开启Spring Security的自定义配置
@EnableWebSecurity
public class WebSecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http.authorizeHttpRequests((authorize) -> authorize.anyRequest().authenticated());
http.formLogin(formLogin->{
formLogin.loginPage("/login").permitAll()
// 修改自定义的表单参数
.usernameParameter("myUsername")
.passwordParameter("myPassword")
.failureUrl("/login?failure")
.failureHandler(new MyAuthenticationFailureHandler())
// 这里将默认的登录成功handler改为我们自定义的handler
.successHandler(new MyAuthenticationSuccessHandler());
//如果不配置permitAll,就会导致出现login页是初始登录页,但是这个页面资源又收到保护,导致跳转回登录页
//但是登录页又收到保护,于是又要跳转到登录页,就会形成页面递归导致报错
});
http.logout((Logout)->{
Logout.logoutSuccessHandler(new MyLogoutSuccessHandler());
});
http.exceptionHandling(exceptionHandling->{
exceptionHandling.authenticationEntryPoint(new MyAuthenticationEntryPoint());
});
http.csrf(csrf->csrf.disable());
http.cors(withDefaults());
return http.build();
}
// @Bean
// public UserDetailsService userDetailsService() {
//// 创建基于内存的用户信息管理器
//// InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();
//// 创建基于数据库的用户信息管理器
// DBUserDetailsManager manager = new DBUserDetailsManager();
//// 创建UserDetails对象,并设置用户名、密码、角色权限等内容
//// 因为用户都在数据库创建保存和查询,所以这里我们使用数据库中的用户信息进行登录验证
//// manager.createUser(User.withDefaultPasswordEncoder().username("admin").password("admin").roles("USER").build());
//// 这里我们的manager对象用于管理我们创建的用户信息
// return manager;
// }
}