Je suis relativement nouveau au printemps MVC et je suis actuellement dans le besoin d'inclure un intercepteur d'authentification pour les services Web. J'ai besoin de l'intercepteur pour lancer une exception AccessForbiddenException si l'authentification échoue en retournant true si elle réussit. J'ai également créé un AuthenticationExceptionController pour attraper l'exception et renvoyer un ResponseEntity avec un HttpStatus. Cependant, quand j'ai rencontré l'erreur interne 500 et je suspecte que c'est dû au AuthenticationExceptionController étant incapable d'attraper l'exception. Voici mes codes. Des conseils sur la façon dont je peux le résoudre?Le conseil du contrôleur ne peut pas attraper l'exception
AuthenticationInterceptor.java
package path.controller;
public class AuthenticationInterceptor implements HandlerInterceptor {
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
// handle the authentication check
if(authentication fails) {
throw new AccessForbiddenException("access forbidden");
}
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
}
}
AccessForbiddenException.java
package path.controller;
public class AccessForbiddenException extends RunTimeException{
public AccessForbiddenException(String message) {
super(message);
}
}
AuthenticationExceptionController.java
package path.controller;
@ControllerAdvice
public class AuthenticationExceptionController {
@ExceptionHandler(AccessForbiddenException.class)
public ResponseEntity<?> handleException(AccessForbiddenException e) {
return new ResponseEntity<String>(e.getMessage(), HttpStatus.FORBIDDEN);
}
}
racine context.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
<context:annotation-config />
<bean id="contextApplicationContextProvider" class="path.context.provider.ApplicationContextProvider"></bean>
<context:property-placeholder location="classpath:application.properties" />
<context:component-scan base-package="path.**" />
</beans>
servlet-context.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
<context:property-placeholder location="classpath:application.properties" />
<context:annotation-config />
<annotation-driven />
<view-controller path="" view-name="index.html" />
<resources mapping="**" location="/" />
<beans:bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/" />
<beans:property name="suffix" value="" />
</beans:bean>
<interceptors>
<interceptor>
<mapping path="/**" />
<exclude-mapping path="/login"/>
<exclude-mapping path="/authenticate"/>
<beans:bean class="path.controller.AuthenticationInterceptor" />
</interceptor>
</interceptors>
<context:component-scan base-package="path" use-default-filters="false">
<context:include-filter expression="path.Controller" type="annotation" />
</context:component-scan>
</beans:beans>
1. Si vous êtes nouveau, ne commencez pas avec Spring XML; le monde a évolué. 2. Publiez l'erreur 500. 3. Publiez la trace de pile, qui en contient une. 4. Affichez la demande. –