解决spring security中遇到的问题
作者:成都犀牛 发布时间:2023-05-08 11:26:46
spring security中遇到的问题
1.An Authentication object was not found in the Security Context
在security上下文中没有找到一个认证对象,我这边的问题在于controller中方法添加了认证注解,但是配置类中
源自于一片我为了解决拦截静态文件的博客,上面说这个忽视目录会以classpath中的static文件夹,实际上这样写有着很大问题,这边会让所有的文件不拦截,虽然你的http认证添加了拦截,但是web这个会影响到效果,所以一边允许所有文件不拦截,一边controller中添加了需要认证的注解,所以你一访问就会进去这个页面,但是进去之后发现在security context并没有这个角色值,所以就会出现这个异常
最后对这个异常说明一句话:这个普通来看就是越过了普通的往上下文中添加了角色但是进去了这个页面就会出现这个错误
2.拦截登录之后总是会进login?error,而且没有提示
这个情况还是有错误提示才会好解决问题,在http认证配置中的FormLoginConfigurer
添加一个failureUrl("/login/error")
,当然这个地址是我们自己定义的,然后对应的congtroller方法:
@RequestMapping(value = "/login/error")
public void loginError(HttpServletRequest request, HttpServletResponse response) {
response.setContentType("text/html;charset=utf-8");
AuthenticationException exception =
(AuthenticationException) request.getSession().getAttribute("SPRING_SECURITY_LAST_EXCEPTION");
try {
response.getWriter().write(exception.toString());
} catch (IOException e) {
e.printStackTrace();
}
}
这样就可以把最基本的错误打印出来,然后我们再根据实际问题进行处理
3.Spring Security BadCredentialsException
这个具体原因还不是很清楚,但是有个很简单的解决办法,把所有的密码加密方式改为相同的,还不可以的话
单独写一个配置类:
@Configuration
public class BeanConfiguration {
/**
* @return Return to the custom password encryptor.
* The reason why it is extracted separately as a configuration class is because if you don't do this,
* you cannot achieve unified password encryption, which leads to login failures.
* Different password encryption results in different passwords.
*/
@Bean
public PasswordEncoder passwordEncoder(){
return new CustomPasswordEncoder();
}
}
这个CustomPasswordEncoder类是我自己写个一个密码加密类,不想使用的话也可以使用官方推荐的:BCryptPasswordEncoder
springboot用security遇到的问题
如果项目中用了 security ,而不用 security 自带的登入的话 ,会自动跳转其自带的登入界面(前提是已拦截 放开的可以直接访问),/login 自带登入接口路径 ,/logout 自带退出接口路劲。
自定义拦截
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
MyUserDetailsService myUserDetailsService;
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/**/*.css","/**/*.js","/**/*.jpg","/**/*.gif","/**/*.ico","/**/*.ico","/**/*.woff","/**/*.ttf","/**/*.png").permitAll()
// .antMatchers("/main").hasAnyRole("ANONYMOUS,USER")
.anyRequest().authenticated()
.and().csrf().disable()
//指定支持基于表单的身份验证。如果未指定FormLoginConfigurer#loginPage(String),则将生成默认登录页面
.formLogin() // 此开始
.loginPage("/login") //security 自带登入接口
.permitAll()
.and() //此结束
.headers().frameOptions().disable()
.and()
.rememberMe().tokenValiditySeconds(1209600)
.and()
.logout()
.permitAll();
}
}
来源:https://blog.csdn.net/qq_43644023/article/details/108921355
猜你喜欢
- 简介:顺序一致性内存模型是一个理论参考模型,处理器的内存模型和编程语言的内存模型都会以顺序一致性内存模型作为参照。1、数据竞争和顺序一致性当
- 一、背景今天心血来潮,准备测试一下项目中 logback 的自动刷新功能,但是测试时发现并不生效。logback 的配置如下:<con
- 我想到使用Redis的订阅发布模式是用来解决推送问题的~。对于概念性的叙述,多多少少还是要提一下的:什么是Redis发布订阅?Redis发布
- 一、引言在移动应用程序的架构设计中,界面与数据即不可分割又不可混淆。在绝大部分的开发经历中,我们都是使用Fragment来进行界面编程,即使
- 只需要下载相应的zip包,不需装什么手机助手。1、下载相应zip包(ROM)http://download.mokeedev.com/比如我
- Android 7.0调用相机崩溃解决办法 错误提示:android.os.FileUriExposedException: fi
- 一、显式锁什么是显式锁?由自己手动获取锁,然后手动释放的锁。有了 synchronized(内置锁) 为什么还要 Lock(显示锁)?使用
- 了解了inbound事件的传播过程, 对于学习outbound事件传输的流程, 也不会太困难outbound事件传输流程在我们业务代码中,
- Android实现环形进度条的效果图如下:自定义控件:AttendanceProgressBar代码如下:public class Atte
- 使用Java的方式配置Spring我们现在要完全不使用Spring的xml配置,全权使用Java来配置Spring!JavaConfig是S
- 在Spring Boot集成Mybatis的项目中,如果出现SQL语句执行问题,我们需要进行排查。此时就需要打印对应的SQL语句,那么该如何
- 我使用的版本是SpringBoot 2.6.4可以实现注入不同的库连接或是动态切换库<parent>
- 现在很多应用中都会要求用户上传一张图片来作为头像,首先我在这接收使用相机拍照和在相册中选择图片。接下来先上效果图: 接下来看代码:
- 导入依赖菜单大部分情况下不会出现变化,我们可以将其放入Redis 加快加载速度<dependency><groupId&g
- 第一步:图形验证码接口1.使用第三方的验证码生成工具Kaptchahttps://github.com/penggle/kaptcha@Co
- 1、java代码/** 获取客户端IP */ public static final String getClientIp(Ht
- 什么是NIO?线程在处理数据时,如果线程还处于将数据从channel读到buffer的这段时间内,线程可以去做别的事情,等数据都读到buff
- NO.1–注释在程序中,尤其是复杂的程序中,适当地加入注释可以增加程序的可读性,有利于程序的修改、调试和交流。注释的内容
- 本文为大家分享了Android Studio3安装图文教程,供大家参考,具体内容如下Android Studio及其相关资源下载地址:dow
- JavaMail API中定义了一个java.mail.Transport类,它专门用于执行邮件发送任务,这个类的实例对象封装了某种邮件发送