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

Spring Boot:在同一项目中同时验证无状态REST API和有状态“登录” Web控制器?

葛意远
2023-03-14
问题内容

因此,我有一个包含REST API的应用程序,该IETF设备上的自定义Java应用程序使用了REST
API,而无需用户交互。我还有一个Web应用程序,该应用程序需要状态会话来维护用户登录。

可以使用Spring Security来不同地验证对我的API和Web控制器的请求吗?我应该对REST API使用哪种形式的身份验证?


问题答案:

实现您所寻找的一种方法是在Spring Security中具有2种配置。例如

注重antMatcher匹配 不匹配 小号
)。在antMatcher将控制在什么网址设置您的整个配置适用即FormLoginWebSecurityConfigurerAdapter在下面的例子将仅适用于URI匹配/api/test/**。当然,您可以antMatcher在其中一个配置中定义唯一的名称,即config1,在这种情况下,另一个配置将是全部捕获(即,捕获与config1不匹配的所有内容)

@EnableWebSecurity
@Configuration
public class SecurityConfig {


    @Configuration
    @Order(1)                                                        
    public static class ApiWebSecurityConfigurationAdapter extends WebSecurityConfigurerAdapter {

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

        protected void configure(HttpSecurity http) throws Exception {
http.sessionManagement()
        .sessionCreationPolicy(SessionCreationPolicy.STATELESS)

            http
                .antMatcher("/api/v1/**")                               
                .authorizeRequests()
                .antMatchers("/api/v1/**").authenticated()
                    .and()
                .httpBasic();
        }
    }

    @Configuration
    @Order(2)
    public static class FormLoginWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter {

        @Override       
        public void configure(AuthenticationManagerBuilder auth) 
          throws Exception {

            auth.inMemoryAuthentication().withUser("user1").password("user").roles("USER");
            auth.inMemoryAuthentication().withUser("admin1").password("admin").roles("ADMIN");
        }

        @Override
        protected void configure(HttpSecurity http) throws Exception {
http.sessionManagement()
        .sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED); // CONFIGURE TYPE OF SESSION POLICY
            http
                .antMatcher("/api/test/**")
                .authorizeRequests()
                .antMatchers("/api/test/**").authenticated()
                    .and()
                .formLogin();
        }
    }
}


 类似资料:
  • 问题内容: 我想了解最佳实践,即如何在AngularJS中设置路由和模板,以向访问者显示不同的前台和登录区域,然后显示仪表板以在相同的基本URL(’/’)上登录用户。 这两页在结构上完全不同,并且还需要不同的资产。 为网站的两个部分设置两个不同的应用程序是否更好,但是我将如何管理这两个部分之间的会话? 还是在主体标签之间没有任何内容的“空”布局将不同的模板加载到其中,并为前部分和仪表板部分进行单独

  • 在接口流中: 中间操作可分为有状态和无状态。它们影响并行流的结果。 只有两个终端操作是非确定性方法:findAny()和forEach(Consumer)。它们影响并行流的结果。 如果中间无状态操作执行惰性操作,它们可能会产生副作用。这会影响并行Stream的结果。 中间操作可分为以下几类: 有状态 不同的() 排序() 极限(长l) 跳过(长l) 无国籍 地图(功能f) 以下是我的两个问题: >

  • 在EJB3.1中,在无状态EJB中有一个同步块可以吗? 同步块用于在出现连接错误时更新连接。

  • 问题内容: 我正在阅读Java EE 6教程,试图理解无状态会话bean和有状态会话bean之间的区别。如果无状态会话bean在方法调用之间没有保持其状态,为什么我的程序按原样运行? 客户端 我原本希望getNumber每次都返回0,但它返回1,并且在浏览器中重新加载servlet会使它更多。问题在于我对无状态会话Bean如何工作的理解,而与库或应用程序服务器无关。有人可以给我一个无状态会话bea

  • 我想知道如何用ASP.NET Web API实现模型验证。我的模型是这样的: 然后在API控制器中有一个Post操作: 如何添加 ,然后处理向下传递给用户的错误消息?

  • 本文向大家介绍Android仿QQ在状态栏显示登录状态效果,包括了Android仿QQ在状态栏显示登录状态效果的使用技巧和注意事项,需要的朋友参考一下 运行本实例,将显示一个用户登录界面,输入用户名(hpuacm)和密码(1111)后,单击"登录"按钮,将弹出如下图所示的选择登录状态的列表对话框, 单击代表登录状态的列表项,该对话框消失,并在屏幕的左上角显示代表登录状态的通知(如图) 过一段时间后

  • 根据我的理解,Flink中的运算符有源运算符、转换运算符等。我对Flink中运算符的理解正确吗? 在运算符状态下,Flink是维护每个运算符的状态(如针对每个作业/任务的map(),reduce()等),还是维护一个完成的作业/任务的状态?还有,如果我的作业是以多个并行提交的,那么每个槽会有自己的状态吗?

  • 我能够使用CURL命令在JIRA中创建一个票证,并且手头有一个json数据。 curl-D--u:-X POST--data@ 我现在正试图更新生成的票证的状态,但出现以下错误<代码>{“errorMessages”:[],“errors”:{“status”:“无法设置字段‘status’。它不在适当的屏幕上,或未知。”} 卷曲命令: 旋度-D--u