spring security 没有token进行鉴权时,接口一直返回403,我想返回自定义异常
时间: 2023-08-14 18:04:31 浏览: 125
如果你想要在Spring Security中自定义异常来代替默认的403错误,可以通过实现`AccessDeniedHandler`接口并重写`handle`方法来实现。在`handle`方法中,你可以自定义响应信息和状态码。
下面是一个简单的示例:
```java
@Component
public class CustomAccessDeniedHandler implements AccessDeniedHandler {
@Override
public void handle(HttpServletRequest request, HttpServletResponse response, AccessDeniedException accessDeniedException) throws IOException, ServletException {
response.setContentType("application/json;charset=UTF-8");
response.setStatus(HttpServletResponse.SC_FORBIDDEN);
response.getWriter().write("自定义异常信息");
}
}
```
在上面的示例中,我们定义了一个自定义的`AccessDeniedHandler`实现类,并重写了其中的`handle`方法。在方法中,我们设置了响应的内容类型、状态码,并使用`response.getWriter().write()`方法写入了自定义的异常信息。
最后,我们需要将自定义的`AccessDeniedHandler`实现类注册到Spring Security中,可以通过在`WebSecurityConfigurerAdapter`中覆盖`configure`方法并设置`accessDeniedHandler`属性来实现。
```java
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private CustomAccessDeniedHandler customAccessDeniedHandler;
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable().authorizeRequests()
.antMatchers("/public/**").permitAll()
.anyRequest().authenticated()
.and()
.exceptionHandling().accessDeniedHandler(customAccessDeniedHandler);
}
}
```
在上面的示例中,我们将自定义的`CustomAccessDeniedHandler`实现类注入到了`SecurityConfig`中,并在`configure`方法中使用`accessDeniedHandler`属性将其设置为Spring Security的默认异常处理类。
阅读全文