私は Spring Security で開発の成功と失敗のハンドラーをしています。
デバイスの種類に応じて、1 つの html ビューを表示するか、1 つの json 応答を送信する必要があります。この目的のためにSpring Mobileを使用していますが、HttpServletRequestでDeviceオブジェクトを作成すると見つかりません。何かアイデア?
web.xml
<filter>
<filter-name>deviceResolverRequestFilter</filter-name>
<filter-class>org.springframework.mobile.device.DeviceResolverRequestFilter</filter-class>
</filter>
ApplicationContext.xml
<mvc:annotation-driven>
<mvc:argument-resolvers>
<bean class="org.springframework.mobile.device.DeviceWebArgumentResolver" />
</mvc:argument-resolvers>
</mvc:annotation-driven>
クラス
public class AuthFailureHandler implements AuthenticationFailureHandler{
@Override
public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response, AuthenticationException ae) throws IOException, ServletException {
Device device = DeviceUtils.getCurrentDevice(request);
if(device.isNormal()){
response.sendRedirect(response.encodeRedirectURL("./userNoAuth"));
} else {
response.sendRedirect(response.encodeRedirectURL("./rest/userNoAuth"));
}
}
}
エラー
java.lang.NullPointerException at com.myapp.security.handler.AuthFailureHandler.onAuthenticationFailure(AuthFailureHandler.java:19)
アップデート:
.getCurrentDevice(HttpServletRequest) メソッドを getRequiredCurrentDevice(HttpServletRequest) に変更しています。
今、私はこのエラーを受け取ります。
java.lang.IllegalStateException: No currenet device is set in this request and one is required - have you configured a DeviceResolvingHandlerInterceptor?