先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上网络安全知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
如果你需要这些资料,可以添加V获取:vip204888 (备注网络安全)
正文
* User: Json
*
* Date: 2024/3/3
* security 安全框架
**/
@Service
public class UserDetailsServiceImpl implements UserDetailsService {
@Autowired
private IYsUserService iYsUserService;
@Override
public UserDetails loadUserByUsername(String username) throws AuthenticationException {
//根据用户名进行查询
YsUser ysUser = iYsUserService.getUserByUserName(username);
if(ObjectUtils.isEmpty(ysUser)) {
//在用户登录的方法里 如果想让security 安全框架 正确抛出异常给前端 需要使用 BadCredentialsException
// 只有使用了BadCredentialsException异常类
// unsuccessfulAuthentication 这个方法里才能接收到异常 统一抛出
// unsuccessfulAuthentication 这个方法是 认证失败调用的统一方法
throw new BadCredentialsException("用户名不存在!");
}
// if(ysUser.getStatus().intValue() == 0) {
// throw new ErpRuntimeException(“账号已停用”);
// }
//根据userid查询用户操作权限数据
List<String> userPermsList =new ArrayList<>();
// List<String> userPermsList = sysMenuService.findUserPermsByUserId(ysUser.getId());
//创建list集合,封装最终权限数据
List<SimpleGrantedAuthority> authList = new ArrayList<>();
if(!CollectionUtils.isEmpty(userPermsList)){
//查询list集合遍历
for (String perm : userPermsList) {
authList.add(new SimpleGrantedAuthority(perm.trim()));
}
}
return new CustomUser(ysUser, authList);
}
}
**3、 自定义一个秘密校验器 CustomMd5PasswordEncoder 实现** org.springframework.security.crypto.password.PasswordEncoder 接口
package com.oa.security.custom;
import com.oa.common.utils.MD5;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Component;
@Component
public class CustomMd5PasswordEncoder implements PasswordEncoder {
public String encode(CharSequence rawPassword) {
return MD5.encrypt(rawPassword.toString());
}
public boolean matches(CharSequence rawPassword, String encodedPassword) {
return encodedPassword.equals(MD5.encrypt(rawPassword.toString()));
}
}
**4、 创建一个过滤器 来验证token 比如 TokenLoginFilter**
继承 org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter
在方法里 定义四个方法 都是重写父类方法
定义一个构造方法
登录认证方法 获取输入的用户名和密码,调用方法认证 attemptAuthentication() 进行账号密码认证 认证实际就是执行了我们设置的第一步的内容
认证成功调用方法 successfulAuthentication() 如果认证成功 这个方法里 就处理比如生成token 存入权限 等
认证失败调用方法 unsuccessfulAuthentication() 如果认证失败 这个方法里 就处理失败的逻辑
package com.erp.init.security.filter;
import com.alibaba.fastj