解决spring security中遇到的问题

作者:成都犀牛 时间:2023-05-08 11:26:46 

spring security中遇到的问题

1.An Authentication object was not found in the Security Context

在security上下文中没有找到一个认证对象,我这边的问题在于controller中方法添加了认证注解,但是配置类中

解决spring security中遇到的问题

源自于一片我为了解决拦截静态文件的博客,上面说这个忽视目录会以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

标签:spring,security
0
投稿

猜你喜欢

  • java web实现简单留言板功能

    2021-10-29 17:22:31
  • 人工智能开发语言排行榜: 不死Java, 不朽C/C++, 新贵Python【推荐】

    2023-03-12 16:06:54
  • 关于Unsupported major.minor version 49.0的错误解决办法

    2023-06-04 22:57:44
  • java抓取网页或文件中的邮箱号码

    2023-07-30 19:19:28
  • Java线程同步、同步方法实例详解

    2023-10-16 07:10:53
  • Android ItemDecoration 实现分组索引列表的示例代码

    2022-02-10 20:22:12
  • C#中的EventHandler观察者模式详解

    2021-09-04 17:08:27
  • springboot实用配置详细图文教程

    2023-12-07 00:36:43
  • Java 程序员掌握 Spring Boot非常有必要

    2021-06-27 19:06:52
  • Java中Calendar类的一些常用方法小结

    2022-11-21 06:51:06
  • 详解springcloud Feign的Hystrix支持

    2022-07-08 20:15:13
  • Android.bp语法和使用方法讲解

    2022-09-29 19:31:19
  • Java网络编程之IO模型阻塞与非阻塞简要分析

    2021-08-10 18:10:25
  • SpringCloud Eureka服务治理之服务注册服务发现

    2021-12-27 15:07:16
  • Java 类加载机制详细介绍

    2023-12-19 13:55:59
  • Android自定义软键盘的步骤记录

    2023-04-08 07:05:50
  • Java 重入锁和读写锁的具体使用

    2023-09-10 11:06:54
  • maven为MANIFEST.MF文件添加内容的方法

    2022-10-29 11:15:56
  • SpringBoot Entity中枚举类型详细使用介绍

    2023-11-11 00:30:52
  • Android指纹识别功能

    2023-11-04 05:09:18
  • asp之家 软件编程 m.aspxhome.com