我在我的微服务中使用Spring Security基本身份验证来验证客户端,我向消费者提供了我将返回响应作为响应实体
我扩展了BasicAuthenticationEntryPoint,将自己的身份验证入口点自定义为MyBasicAuthenticationEntryPoint。然后抛出一个异常并尝试从@ExceptionHandler处理。但是,这不起作用。此外,我用@ControllerAdvice注释了这个类,并了解到这将处理仅从控制器引发的异常。另外,@ExceptionHandler将在DispatcherServlet之后处理异常,而在我的情况下,请求没有到达控制器,因为请求头中缺少授权细节。
我在这里所能做的就是在HttpServletResponse中包含我的响应头和响应状态。我想知道,当客户试图将返回类型作为ResponseEntity时,是否会处理这个问题
在WebSecurity配置适配器扩展类的config方法中定义了自定义身份验证入口点。
@Configuration
@EnableWebSecurity
public class WebSecurity extends WebSecurityConfigurerAdapter {
@Autowired
private MyBasicAuthenticationEntryPoint authenticationEntryPoint;
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable().
authorizeRequests()
.antMatchers(HttpMethod.POST)
.authenticated()
.antMatchers("/api-docs", "/swagger*/**")
.permitAll()
.and()
.httpBasic().authenticationEntryPoint(authenticationEntryPoint)
;
http.headers().frameOptions().disable();
}
}
创建我的自定义身份验证切入点如下,
@Component
public class MyBasicAuthenticationEntryPoint extends
BasicAuthenticationEntryPoint {
@Override
public void commence
(HttpServletRequest request, HttpServletResponse response,
AuthenticationException authEx)
throws IOException, ServletException {
System.out.println("Child Class");
throw new UnauthorizedException("unauthorized");
//response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
}
通过扩展RuntimeException类定义UnauthorizedException类。
public class UnauthorizedException extends RuntimeException {
public UnauthorizedException(String message) {
super(message);
}
}
在ResponseEntityExceptionHandler扩展类中处理了上述异常,如下所示,
@ControllerAdvice
@RestController
public class CustomizedResponseEntityExceptionHandler extends
ResponseEntityExceptionHandler {
@ExceptionHandler(UnauthorizedException.class)
public final ResponseEntity<Void>
handleNotFoundException(UnauthorizedException ex, WebRequest request) {
System.out.println("handling 401");
return new ResponseEntity<>((HttpStatus.UNAUTHORIZED));
}
}
我希望返回响应实体
CustomizedResponseEntityExceptionHandler仅处理控制器内遇到的异常,这是自解释的。
您错误配置了authEntryPoint,请参阅此答案以了解如何正确配置它。
为了实现您想要的,您可以直接写入MyBasicAuthenticationEntryPoint中的响应。开始
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.0.3.xsd“>
Tweepy API请求twitter return me Twitter错误响应:状态代码=401。 这是我的实际代码: 我曾试图用tweepy软件包删除推文,并获得了所有必需的密钥。镊子包装不起作用吗?有人能帮我解决这个问题吗。
问题内容: 从HttpClient 4.3开始,我一直在使用HttpClientBuilder。我正在连接到具有基本身份验证的REST服务。我将凭据设置如下: 但是,这不起作用(我正在使用的REST服务返回401)。怎么了? 问题答案: 从此处的 抢先身份验证 文档中: http://hc.apache.org/httpcomponents-client- ga/tutorial/html/aut
问题内容: 尝试使用JavaMail中的NTLM连接到Exchange服务器。我可以连接到SMTP,但不能连接到IMAP。我还可以使用相同的主机/用户名/密码通过OS X Mail.app应用程序进行身份验证,帐户类型=“ IMAP”,端口143,ssl = false,authentication = NTLM,域名=“。 连接代码: 输出: 我尝试通过http://www.oracle.com
我相对来说是JMeter的新手,但是我很难让HTTP Sampler登陆到一个安全的网页上。我认为它需要NTLM认证,所以我使用HTTP授权管理器来传递BlazeMeter指南中指定的凭证 我的授权管理器具有以下值: 基本网址: https:// [测试站点] 用户名: [我的用户名] 密码: [我的密码] 域:与基本网址相同 机制: BASIC_DIGEST 然而,我只是得到一个401错误(见下
问题内容: 以下是我从GoLang获得的MongoDB连接拨号。但是它返回一个紧急消息“ SASL身份验证步骤服务器返回错误:身份验证失败。 ”。我的用户名,密码,hostAddrs和dbName是正确的。我在这里想念什么? 问题答案: 我遇到类似的错误并添加了参数,并且在我们连接到远程MongoDB时可以正常工作 在您的代码中使用以下类似格式: