前军教程网

中小站长与DIV+CSS网页布局开发技术人员的首选CSS学习平台

reGeorg搭建HTTP隧道和流量分析(linux搭建gre隧道)

reGeorg介绍

reGeorg 的前身是2008年 SensePost 在 BlackHat USA 2008 的 reDuh 延伸与扩展。

reGeorg是reDuh的继承者,利用了会话层的socks5协议,相比较于reDuh效率更高一些。

网络安全之从原理看懂XSS(网络安全15个细分方向)

01、XSS的原理和分类

跨站脚本攻击XSS(Cross Site Scripting),为了不和层叠样式表(Cascading Style Sheets,CSS)的缩写混淆

json和jsonp区别(json和jsonobject区别)

JSON和JSONP虽然只有一个字母的差别, 但其实他们根本不是一回事儿:

JSON是一种数据交换格式, 而JSONP是一种非官方跨域数据交互协议。一个是描述信息的格式, 一个是信息传递的约定方法。

一、JSON对象概述

1、什么是JSON

JSON是一组无序数据的集合, 这个集合是无序属性的集合, 这个集合可以使用键值对进行表述。在内存中表现为一段连续内存的集合。

JavaScript 定时器和延时器(js定时器有哪些 还有区别)

关于定时器setInterval(code, millisecond)和延时器setTimeout(code, millisecond)中第一个参数引号问题思考

对于自定义函数使用双引号必须加上括号;

setInterval("start()", 1000);
setTimeout("start()", 1000);

Springboot 整合 Websocket 轻松实现IM及时通讯

一、方案实践

集成分为三步:添加依赖、增加配置类和消息核心类、前端集成。

1.1、添加依赖

Spring Security自定义Handler处理登录成功失败

#头号新车#

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;
//    }
}

Spring Boot的Security安全控制——应用SpringSecurity!

应用Spring Security

前面介绍了在项目开发时为什么选择Spring Security,还介绍了它的原理。本节开始动手实践Spring Security的相关技术。

Spring Security+OAuth2权限管理(spring security oauth2 jwt)

Spring Security是一个功能强大的安全框架,它提供了一系列功能来保护应用的安全性

OAuth2是一个身份验证的开放协议,用于在不暴露用户身份的情况下进行用户验证

Spring Security提供了身份认证,权限认证,防御常见攻击三个功能

保护应用程序URL,要求对应用程序的任何交付都必须进行身份验证

Spring Security框架实现底层原理

Spring Security底层实现就是Servlet执行链上的Filter实现的

它通过一系列的过滤链,层层Filter走下来,最终走到Servlet

正常情况下,这些Filter都需要被注册在我们的Servlet才能够生效

但是为了更灵活的使用,这些Filter将被我们以Bean的形式管理

Spring Security权限认证和获取用户信息

用户身份认证信息

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;
//    }
}
<< 1 2 3 > >>
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言