1

Моя весенняя безопасность не работает. Я перехожу из файла конфигурации xml-конфигурации Spring-безопасности (версия 3.1) в java config (версия 4.0.1). Как только я войти в это дает мне эту страницу: HTTP Status 401 - Ошибка аутентификации: Неверные учетные данныеПеренос Spring Security 3.1 с XML-конфигурацией до версии 4.0.1 с конфигурацией Java вызывает статус HTTP 401 - Ошибка аутентификации: неправильные учетные данные

Я вывешу мою конфигурацию ниже:

web.xml

<?xml version="1.0" encoding="UTF-8"?> 
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> 


    <context-param> 
      <param-name>javax.faces.DEFAULT_SUFFIX</param-name> 
      <param-value>.xhtml</param-value> 
    </context-param> 

    <context-param> 
     <param-name>javax.faces.VALIDATE_EMPTY_FIELDS</param-name> 
     <param-value>false</param-value> 
    </context-param> 

    <welcome-file-list> 
     <welcome-file>login.xhtml</welcome-file> 
    </welcome-file-list> 
    <servlet> 
     <servlet-name>Faces Servlet</servlet-name> 
     <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>Faces Servlet</servlet-name> 
     <url-pattern>*.xhtml</url-pattern> 
    </servlet-mapping> 

    <context-param> 
      <param-name>com.sun.faces.expressionFactory</param-name> 
      <param-value>com.sun.el.ExpressionFactoryImpl</param-value> 
    </context-param> 

    <servlet> 
     <description>generated-servlet</description> 
     <servlet-name>CAR Servlet</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
     <init-param> 
      <param-name>contextConfigLocation</param-name> 
      <param-value>classpath:CAR-web-context.xml</param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 

    <listener> 
     <listener-class> 
      org.springframework.security.web.session.HttpSessionEventPublisher 
     </listener-class> 
    </listener> 
    <listener> 
     <listener-class> 
      org.springframework.web.context.request.RequestContextListener</listener-class> 
    </listener> 
    <listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 


    <filter> 
     <description> 
      generated-spring-security-session-integration-filter 
     </description> 
     <filter-name>SpringSecuritySessionIntegrationFilter</filter-name> 
     <filter-class> 
      org.springframework.security.web.context.SecurityContextPersistenceFilter</filter-class> 
    </filter> 
    <filter> 
     <description>generated-persistence-filter</description> 
     <filter-name>CARFilter</filter-name> 
     <filter-class> 
      org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter</filter-class> 
     <init-param> 
      <param-name>entityManagerFactoryBeanName</param-name> 
      <param-value>CAR</param-value> 
     </init-param> 
    </filter> 
    <filter> 
     <description>generated-sitemesh-filter</description> 
     <filter-name>Sitemesh Filter</filter-name> 
     <filter-class>com.opensymphony.module.sitemesh.filter.PageFilter</filter-class> 
    </filter> 



    <filter-mapping> 
     <filter-name>SpringSecuritySessionIntegrationFilter</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 
    <filter-mapping> 
     <filter-name>HRBFilter</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 
    <filter-mapping> 
     <filter-name>Sitemesh Filter</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 


    <persistence-unit-ref> 
     <persistence-unit-ref-name>persistence/CAR</persistence-unit-ref-name> 
     <persistence-unit-name>CAR</persistence-unit-name> 
     </persistence-unit-ref> 

     <persistence-context-ref> 
     <persistence-context-ref-name>persistence/CAR</persistence-context-ref-name> 
     <persistence-unit-name>CAR</persistence-unit-name> 
    </persistence-context-ref> 

</web-app> 
@EnableTransactionManagement 
    @ComponentScan({ "com.car" }) 
    @ImportResource({ "classpath:persistence.xml" }) 
    public class PersistenceJPAConfigXml { 

    public PersistenceJPAConfigXml() { 
     super(); 
    } 

    } 
@Configuration 
@EnableWebSecurity 
public class SecurityConfiguration extends WebSecurityConfigurerAdapter { 


    @Autowired 
    @Qualifier("userDetailsService") 
    UserDetailsService userDetailsService; 

    @Autowired 
    LoginSuccess loginSuccess; 

    @Autowired 
    LoginFailure loginFailure; 


    @Autowired 
    public void configureGlobalSecurity(AuthenticationManagerBuilder auth) throws Exception { 
     ShaPasswordEncoder encoder = new ShaPasswordEncoder(); 
     auth.userDetailsService(userDetailsService).passwordEncoder(encoder); 
    } 

     @Override 
     protected void configure(HttpSecurity http) throws Exception { 

      http.authorizeRequests() 
     .antMatchers("/login.xhtml").permitAll() 
     .antMatchers("/jsf/**").access("isAuthenticated()") 
     .antMatchers("/run**").access("isAuthenticated()") 
      .and().formLogin().loginProcessingUrl("/login").loginPage("/login.xhtml") 
     .successHandler(loginSuccess) 
     .failureHandler(loginFailure).defaultSuccessUrl("/jsf/dashboard.xhtml") 
     .and().csrf() 
     .and().sessionManagement().maximumSessions(2).maxSessionsPreventsLogin(true); 
    } 
} 
import org.springframework.security.web.context.AbstractSecurityWebApplicationInitializer; 

    public class SecurityWebApplicationInitializer extends   AbstractSecurityWebApplicationInitializer { 

    } 

    @Configuration 
    public class AppConfig { 
    @Bean 
    public LoginSuccess loginSuccess() { 
      return new LoginSuccess(); 
    } 

    @Bean 
    public LoginFailure loginFailure() { 
     return new LoginFailure(); 
    } 
} 




Login.xhtml 

     <form id="login" action='#{request.contextPath}/login' method='POST'> 
     <h1>Log In</h1> 
     <fieldset id="inputs"> 
      <input id="j_username" type="text" name="j_username" placeholder="Username" /> 
      <input id="j_password" type="password" name="j_password" placeholder="Password" /> 
     </fieldset> 
     <fieldset id="actions"> 
      <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}" /> 
      <input id="submit" value="Log in" type="submit" /><a href="">Forgot your password?</a> 
     </fieldset> 
     <c:if test="${not empty param.login_error}"> 
     <fieldset id="errors"> 
      Your login attempt was not successful, try again.<br/> 
      Reason: <h:outputText value="${SPRING_SECURITY_LAST_EXCEPTION.message}" /> 
     </fieldset> 
     </c:if> 
    </form> 

Я что-то пропустил в своей конфигурации?

+0

Это не проблема JSF/PF. JSF/PF не является основой безопасности. Я не делаю Весны. Я занимаюсь только Java EE. Поэтому я не могу ответить на вопросы, связанные с весной. – BalusC

+0

Хорошо Нет проблем. Спасибо – Alina

+0

Привет, Алина, у вас есть решение для этой проблемы? Сейчас я столкнулся с той же проблемой. – Krishna

ответ

0

Spring Security 4 поддерживает настройки параметров пользователя и пароль в случае, если вы не хотите изменять свою форму входа в систему, так что вы могли бы использовать:

.formLogin() 
    .usernameParameter("j_username") 
    .passwordParameter("j_password") 

См Перенастройка из 3.x Spring Security 4. x (Конфигурация XML) для получения подробной информации о переходе на loginForm http://docs.spring.io/spring-security/site/migrate/current/3-to-4/html5/migrate-3-to-4-xml.html#m3to4-xmlnamespace-form-login и http://docs.spring.io/spring-security/site/migrate/current/3-to-4/html5/migrate-3-to-4-jc.html

+0

Также не забудьте изменить URL-адрес вашей формы или настроить formLogin для использования Spring 3 Url: 'formLogin(). LoginProcessingUrl ("/j_spring_security_check ")' –