2013-10-15 6 views
1

Добрый день.Как работает поставщик аутентификации

Пожалуйста, помогите. Невозможно понять, как должен запускаться мой пользовательский провайдер аутентификации.

у меня есть:

весна-context.xml

<security:http pattern="/login" security="none" /> 


      <security:http auto-config="true" use-expressions="true"> 


       <security:form-login login-page="/login"/> 

       <security:intercept-url pattern="/" access="hasRole('ROLE_USER')"/> 

       <security:form-login authentication-failure-url="www.google.com"/> 

      </security:http> 



      <security:authentication-manager> 

       <security:authentication-provider user-service-ref="userSecurityService"/> 

      </security:authentication-manager> 


      <bean id="webContentDAOImpl" class="demidov.pkg.persistence.WebContentDAOImpl"> 
       <property name="sessionFactory"><ref bean="sessionFactory"/></property> 
      </bean> 


      <bean id="userSecurityService" class="demidov.pkg.persistence.UserSecurityService"> 
       <property name="webContentDAOIF" > 
        <ref bean="webContentDAOImpl"/> 
       </property> 
      </bean> 

Войти Контроллер:

@Controller 
public class LoginController { 

    @RequestMapping(value="/login", method=RequestMethod.GET) 
    public String login() { 

     return "login"; 
    } 


    @RequestMapping(value="/security/j_spring_security_check", method=RequestMethod.POST) 
    public String access() { 

     return "redirect:/"; 

    } 


} 

Войти JSP-страница:

<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<title>Insert title here</title> 
</head> 
<body> 

    <form action="security/j_spring_security_check" method="post"> 

     UserName: <input type="text"/> <br> 
     Password: <input type="password"/> <br> 

     <br> 

     <input type="submit"/> 


    </form> 

</body> 
</html> 

Пользовательские главный распознаватель:

public class UserSecurityService implements UserDetailsService{ 


    WebContentDAOIF webContentDAOIF; 

     public WebContentDAOIF getWebContentDAOIF() { 
      return webContentDAOIF; 
     } 


     public void setWebContentDAOIF(WebContentDAOIF webContentDAOIF) { 
      this.webContentDAOIF = webContentDAOIF; 
     } 


    @Override 
    public UserDetails loadUserByUsername(String userName) 
      throws UsernameNotFoundException { 


     UserDetails userDetails = null; 


     TheUser theUser = webContentDAOIF.fetchUserByName(userName); 

     userDetails = new User(theUser.getUserEmale(), theUser.getUserPassword(), true, true, true, true, getAthorities(theUser.getRoleAccess())); 


     return userDetails; 
    } 


    public Collection<GrantedAuthority> getAthorities(String role) { 


     List<GrantedAuthority> authList = new ArrayList<GrantedAuthority>(2); 


     authList.add(new SimpleGrantedAuthority(" ")); 


     if (role.equals("ROLE_USER")) { 

      authList.add(new SimpleGrantedAuthority("ROLE_USER")); 
      } 

      // Return list of granted authorities 
      return authList; 

    } 

} 

Я просто не понимаю, как мой пользовательский главный решатель должен работать с безопасностью. Как это должно быть вызвано и тем, что? Когда я помещаю неправильное имя пользователя и пароль на страницу входа, похоже, что он не работает с моим UserSecurityService и просто перенаправляет меня на страницу входа снова из-за моегов spring-context.xml. Я считаю, что j_spring_security_check может что-то сделать, но сомневаюсь. Пожалуйста, помогите мне понять.

ответ

3

любезно обратитесь к указанной ниже ссылке, может иметь некоторую помощь: -
    spring security custom authentication

+0

Это ссылка, как заставить его работать (как создать безопасность), но я бы хотел знать, почему мой UserSecurit yService не вызывает и почему. Обычно, как это работает? – Vad

0

метод loadUserByUsername оказывают параметры userName который, имеющее значение, размещенные из браузера, что имя_пользователь сравнивается с БД и пароль извлекается от БД и передан в UserDetail объект, у которого есть пароль, отправленный из браузера, поэтому теперь он будет сравнивать пароли внутри и действует соответственно для аутентификации.

Смежные вопросы