2013-04-08 4 views
4

Я новичок в Весна безопасности, так что я пытаюсь использовать Spring MVC для обработки неверный логин, но в итоге с Страница не найдена 404Весна безопасности недействителен обработки

В моей безопасности-context.xml, у меня есть Войти этот AuthenticationProvider обрабатывает все аутентификационные данные, поэтому просто проверяйте учетную запись пользователя и пароль, но по некоторым причинам он говорит, что authentication-failure-url не найден 404 всякий раз, когда есть некорректная попытка входа в систему.

<security:authentication-manager alias="authenticationManager"> 
    <security:authentication-provider ref="AuthenticationProvider"/> 
    </security:authentication-manager> 

    <bean id="preAuthenticationFilter" 
     class="authentication.PreAuthenticationFilter" 
     p:authenticationManager-ref="authenticationManager" /> 

    <security:http auto-config="true"> 
    <security:intercept-url pattern="/member/**" access="MEMBER" requires-channel="https"/> 
    <security:form-login login-page="/login" 
         username-parameter="email" 
         password-parameter="password" 
         default-target-url="/member/" 
         authentication-failure-url="/loginfailed" /> 
    <security:custom-filter position="PRE_AUTH_FILTER" ref="preAuthenticationFilter" /> 
    </security:http> 

Но у меня есть соответствующий контроллер, который прослушивает этот шаблон URL для обработки неверного входа.

@Controller 
public class LoginController 
{ 
    @RequestMapping(value = "/loginfailed", method = RequestMethod.GET) 
    public String loginError(ModelMap model) 
    {  
     model.addAttribute("error", "true"); 
     return "login"; 
    } 
} 

** * *UPDATE* ** * *

В некоторых моментах моей AuthenticationProvider проверяет пользователя и бросить исключение (я дон не знаю, если это имеет значение), когда у пользователя есть плохие удостоверения

@Component 
public class AuthenticationProvider{ 
    private User validateUser(String userName, String password) 
    { 
     try{ 
      //authenticate user's info 
      ....... 
     } 
     catch (UnauthorizedAccessException e) 
     { 
      throw new BadCredentialsException(e); 
     } 
    } 
} 
+0

Does метод '= RequestMethod.GET' работает? – Xaerxess

+0

Нет ... Я пробовал как GET, так и POST – peter

+4

Мне кажется, что это не проблема Spring Security, а скорее конфигурация MVC - делает простой запрос POST/GET для '/ loginfailed' return 200 status? – Xaerxess

ответ

4

(В последующих замечаний.) 302 STATU из j_spring_security_check и BadCredentialsException являются правильными. Похоже, что ваш контроллер вообще не зарегистрирован. Вы имеете в виду, что аннотировать фасоль с @Controller недостаточно, чтобы заставить его работать? Quoting documentation:

Вы можете определить аннотированные бобы контроллера в явном виде, с использованием стандартного Spring определения бин в контексте диспетчера. Однако стереотип также допускает автоматическое определение, выровненное с помощью Весенняя общая поддержка для обнаружения классов компонентов в пути пути к классам и для определения их автоматической регистрации.

Чтобы включить автоматическое определение таких аннотированных контроллеров, вы добавляете сканирование компонентов в вашу конфигурацию. Используйте весенне-контекстный схемы, как показано в следующем фрагменте кода 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:p="http://www.springframework.org/schema/p" 
    xmlns:context="http://www.springframework.org/schema/context" 
    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"> 

    <context:component-scan base-package="com.example"/> 

    <!-- ... --> 

</beans> 

(при условии, LoginController в пакете com.example).

Простая декларация боб можно использовать вместо компонента сканирования:

<bean class="com.example.LoginController" /> 
Смежные вопросы