2015-02-06 10 views
0

CD를 사용하여 PicketLink로 보호하려는 PrimeFaces 기반 응용 프로그램을 개발했습니다. 나는 this example을 따라 갔고 레이아웃을 포함한 여러 PrimeFaces 구성 요소가있는 로그인 페이지를 만들었습니다. 그러나 모든 스타일과 기능은 상실됩니다. 위에 단순화 된 login.xhtml 페이지 (위와 연결된 예와 일치시키기 위해)는 스타일을 지정하지 않습니다. 원래의 예에서 보안 '프로필'는 login.xhtml 파일 이외의 보호 모든 자원을 가지고 있기 때문에PicketLink의 PrimeFaces 기반 응용 프로그램이 로그인 페이지에 스타일을 표시하지 않습니다.

<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:p="http://primefaces.org/ui"> 
<h:head/> 
<h:body> 
    <p:panel> 
    <h:form method="POST" prependId="false"> 
     <p:inputText id="j_username" /> 
     <p:password id="j_password"/> 
     <p:commandButton id="login" value="Login" action="#{identity.login()}" ajax="false"/> 
    </h:form> 
    </p:panel> 
    <p>Tip: you can login with a username/password of jane/abcd1234.</p> 
</h:body> 
</html> 

답변

2

는 CSS와 JS 파일이로드되지 않은 이유입니다. JSF는 기본적으로 '가상'javax.faces.resource 폴더에서 리소스를로드합니다. 이것은 인증에서 제외해야합니다. 원래 예제의 HttpSecurityConfiguration은이 가상 폴더를 구성에서 제외하도록 조정되어야합니다.

public class HttpSecurityConfiguration { 

    public void onInit(@Observes SecurityConfigurationEvent event) { 
     SecurityConfigurationBuilder builder = event.getBuilder(); 

     builder 
      .http() 
       .forPath("/javax.faces.resource/*") 
        .unprotected() 
       .forPath("/index.jsf") 
        .unprotected() 
       .allPaths() 
        .authenticateWith() 
        .form() 
         .authenticationUri("/login.jsf") 
         .loginPage("/login.jsf") 
         .errorPage("/error.jsf") 
         .restoreOriginalRequest() 
       .forPath("/logout") 
        .logout() 
        .redirectTo("/index.jsf"); 
    } 
}