@Override
public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) throws AuthenticationException {
Authentication authentication = null;
if(hasJsonToken(request)) {
JwtAuthenticationToken jwtAuthenticationToken = new JwtAuthenticationToken(getJsonToken(request));
authentication = getAuthenticationManager().authenticate(jwtAuthenticationToken);
} else {
throw new AuthenticationCredentialsNotFoundException(AUTHENTICATION_CREDENTIALS_NOT_FOUND_MSG);
}
return authentication;
}
@Override
public void commence(HttpServletRequest request, HttpServletResponse response,
AuthenticationException authException) throws IOException, ServletException {
response.sendError(HttpStatus.UNAUTHORIZED.value(),HttpStatus.UNAUTHORIZED.getReasonPhrase());
}
@Bean
public RestAuthenticationEntryPoint restAuthenticationEntryPoint() {
return new RestAuthenticationEntryPoint();
}
protected void configure(HttpSecurity http) throws Exception {
http.addFilterBefore(jwtAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class)
.exceptionHandling().authenticationEntryPoint(restAuthenticationEntryPoint()).and()
.csrf().disable()
.authorizeRequests().antMatchers(AUTHORISED_SERVICE_REQUESTS_ANT_MATCHER).authenticated()
.anyRequest().permitAll();
}
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
...
}
jwtAuthenticationFilter.setAuthenticationFailureHandler(new JwtAuthenticationFailureHandler());
我现在的问题是,这样做正确吗?AuthenticationEntryPoint和AuthenticationFailureHandler之间有什么区别?
AuthenticationEntryPoint
和AuthenticationFailureHandler
之间的区别在于前者用于“告诉”未经身份验证的用户在哪里进行身份验证,例如,通过将他们重定向到登录表单。后者用于处理错误的登录尝试。
您的AuthenticationEntryPoint
可能没有被调用,因为您引发了异常。如果用户试图访问一个需要身份验证的endpoint,而您没有抛出任何东西,则会调用它。在没有凭据的情况下,不对用户进行身份验证就足够了,您不需要抛出异常。
如果使用JWT身份验证创建应用程序,您可能不想将用户重定向到任何地方,这样您就可以使用org.springframework.security.web.authentication.httpstatusentrypoint
或类似于您的入口点来返回状态代码。
我用SpringBoot创建了一个简单的演示应用程序,其中包括执行器。带有@Scheduled注释的任务显示在执行器中,但以编程方式启动的任务不会显示。有没有办法让他们也出现? 我已经注释了@Enable调度。 我的组件如下所示: 执行器的结果仅显示带注释的任务:
我们什么时候应该使用Spring boot执行器。如果包括在内,它对应用程序内存和CPU使用有多大影响? 我目前正在使用Spring Boot 2. x。
我正在将一个旧的java Spring项目重构为springboot,并以传统的war风格部署它。出于某种原因,我必须坚持传统的web.xml来启动应用程序。多亏了Springboot遗产,我可以通过web.xml实现这一点: 此外,我添加了springboot执行器依赖项。应用程序。属性如下所示: 应用程序可以正常启动,但当我尝试从浏览器访问endpoint时,它只返回一个“401需要完全身份验
我需要改变频率来检查springboot执行器中的DB运行状况。默认DB运行状况检查查询每毫秒执行一次。我想让这个查询每1分钟后执行一次,而不是毫秒。有什么方法可以自定义它吗?
我正在使用springboot,我正在使用执行器和prometheus暴露度量。我想暴露“信息”、“健康”、“度量”、“prometheus”、“关闭”等等。但是即使我指定应用程序属性,我看到的是甚至根“/执行器”也暴露了。 我想禁用根部执行器,只有我之前说过的5个成员。 有没有办法不只暴露/执行器endpoint?我也尝试过在应用程序属性中这样做: 这是外露致动器的列表:
我有一个springboot应用程序,执行器在我的邮件服务器上执行许多请求。 我在github中创建了一个示例来演示这一点。 增加属性eureka.client.registryFetchInterval秒不是一个解决方案,我希望它永远不会在电子邮件或数据库中进行测试(在我的示例中,我没有数据库)
我正在从我的Jenkins点击总线刷新endpoint,我希望该endpoint是安全的。 下面是我的申请。yml公司 下面是我在spring boot中的http配置 现在,当我点击curl时——请求GEThttp://localhost:8080/health我得到如下正确的回答 但是当我点击curl时——请求POSThttp://localhost:8080/bus-刷新 或 我得到403和
我有@test Annotaion的测试市场。但是当我运行测试用例时,它显示测试运行:0,失败:0,跳过:0我正在从Eclipse中运行测试用例。我已经在Eclipse中安装了testng插件。 @test中的属性是自定义的。 TestNG版本:6.8.0