当前位置: 首页 > 面试题库 >

Spring Security Java Config不生成注销URL

巫马心水
2023-03-14
问题内容

我正在使用Spring 4.0.5.RELEASE 和Spring Security 3.2.4

我正在尝试使用java config(基于Spring示例)创建一个简单的示例应用程序。该应用程序启动且身份验证正常运行,即访问受保护的url /
settings / profile* 时,我被重定向到登录表单
*

但是,没有生成 / logout url吗?如果我按localhost:8080 / logout,则会收到404。

我在以前的项目中使用过类似的代码,所以也许与版本有关?

这是我的安全配置

@Configuration
@EnableWebMvcSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication().withUser("user").password("password").roles("USER");
        auth.inMemoryAuthentication().withUser("admin").password("password").roles("ADMIN");
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .antMatchers("/settings/**").hasRole("ROLE_ADMIN")
                    .and()
                .formLogin()
                    .and()
                .logout()
                    .deleteCookies("remove")
                    .invalidateHttpSession(true)
                    .logoutUrl("/logout")
                    .logoutSuccessUrl("/logout-success")
                .permitAll();
    }
}

这是我的WebAppInitializer来引导应用程序

 public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class<?>[] { SecurityConfig.class , MvcConfig.class };
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return null;
    }

    @Override
    protected String[] getServletMappings() {
         return new String[] {"/"};
    }
}

最后是我的MvcConfig

@EnableWebMvc
@Configuration
@ComponentScan(basePackages = {"web"})
public class MvcConfig extends WebMvcConfigurerAdapter {

    @Bean
    public ViewResolver viewResolver() {
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        viewResolver.setViewClass(JstlView.class);
        viewResolver.setPrefix("/WEB-INF/views");
        viewResolver.setSuffix(".jsp");
        return viewResolver;
    }
}

问题答案:

默认情况下,登出URL要求POST请求。要对GET请求执行注销,您需要:

http
      .logout()
          .logoutRequestMatcher(new AntPathRequestMatcher("/logout"));

或者,如果您想支持PUT或其他方法,请将其作为参数传递:

http
      .logout()
          .logoutRequestMatcher(new AntPathRequestMatcher("/logout", "PUT"));

请参阅文档:http :
//docs.spring.io/spring-
security/site/docs/3.2.4.RELEASE/reference/htmlsingle/
(第6.5.3节。注销)



 类似资料:
  • 我的登录页面http://localhost:8080/nradmin/welcome,主页(登录成功后)http://localhost:8080/nradmin/home 我想注销,不再能够访问任何其他页面,如主页,但只能访问欢迎(登录)页面。如果我键入http://localhost:8080/nradmin/home在注销后的浏览器上,我可以继续访问主页,而无需登录。 我已经实现了从抽象类

  • 我正在尝试Laravel5.2中的简单注销功能,但我真的不明白我错在哪里。如果有人能帮忙,那就太好了。 这是路线 loginController方法: 视图中使用此功能的链接: 会话存储代码: AuthController构造函数: 当用户单击注销链接时,它会重定向到根页面,但不会真正破坏会话或注销。它不需要登录来查看页面(它应该这样做)。

  • 我有一个包含注销endpoint的Spring控制器 我如何使用mockmvc来测试这一点? 到目前为止,我只有这段代码,但我不知道如何测试该请求。已调用logout()(其效果如何?)。

  • 我试图生成一个API客户端从v2 swagger文件openapi生成器cli。为此,我使用openapi生成器cli的docker容器,它将其版本报告为4.1.0-SNAPSHOT。 代码生成使用以下选项: 我还尝试将选项设置为true。 但是,生成的服务类不使用装饰器进行注释。因此,在我的组件中导入它们并在组件的构造函数中添加服务后,我无法使用它们。这就是我的组件的样子: 失败,因为userS

  • 我目前正面临一个问题,即Eureka不能注销已注册的服务。我直接从git hub中提取了Eureka服务器示例,只做了一个更改,。我的application.yml如下所示: 到目前为止,一旦eureka客户端启动,它将在3秒内注册。它只是在服务突然终止时从不取消注册。在我终止服务后,Eureka仪表盘上写着: 紧急情况!EUREKA可能错误地声称实例已经出现,而它们不是.续约低于阈值,因此实例不

  • 我有一个注销功能,在另一个项目中工作,但由于某种原因,在我目前正在处理的项目中不工作。看起来它只是刷新了页面。我查了Symfony的官方留档https://symfony.com/doc/current/security.html但无济于事。希望你们能帮我。 更新:Security.yml: 控制器: 注销小枝: 编辑:我正在使用Symfony 3.4。当我进入页面 /logout它看起来像只是刷