2012-04-12 8 views
3

ich Antwort von @BalusC auf JSF 2.0: How to get the URL that is entered in the browser's address bar folgende bin Seiten von den Benutzern zu beschränken, die nicht angemeldet sindJSF - Implementierung Filter für eingeschränkte Seiten

Filter:

public class RestrictPageFilter implements Filter{ 
    FilterConfig fc; 

    @Override 
    public void init(FilterConfig filterConfig) throws ServletException { 
     fc=filterConfig; 
    } 

    @Override 
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { 
     HttpServletRequest httpreq = (HttpServletRequest) request; 
     HttpServletResponse httpres = (HttpServletResponse) response; 
     if (httpreq.getUserPrincipal() == null) { 
      httpreq.getSession().setAttribute("from", httpreq.getRequestURI()); 
      httpres.sendRedirect("/pages/login.xhtml"); 
     } else { 
      chain.doFilter(request, response); 
     } 
    } 

    @Override 
    public void destroy() { 
     // TODO Auto-generated method stub 
    } 
} 

web.xml:

.
<security-constraint> 
    <web-resource-collection> 
     <web-resource-name>Admin pages</web-resource-name> 
     <url-pattern>/admin/*</url-pattern> 
     <url-pattern>/restricted/*</url-pattern> 
     <http-method>GET</http-method> 
      <http-method>POST</http-method> 
    </web-resource-collection> 
    <auth-constraint> 
     <role-name>ADMIN</role-name> 
    </auth-constraint> 
    </security-constraint> 

    <security-constraint> 
    <web-resource-collection> 
     <web-resource-name>User pages</web-resource-name> 
     <url-pattern>/restricted/*</url-pattern> 
     <http-method>GET</http-method> 
      <http-method>POST</http-method> 
    </web-resource-collection> 
    <auth-constraint> 
     <role-name>ADMIN</role-name> 
     <role-name>USER</role-name> 
    </auth-constraint> 
    </security-constraint> 

    <!--login-config> 
    <auth-method>FORM</auth-method> 
    <realm-name>jdbc-realm</realm-name> 
    <form-login-config> 
     <form-login-page>/pages/login.xhtml</form-login-page> 
     <form-error-page>/pages/error.xhtml</form-error-page> 
    </form-login-config> 
    </login-config--> 

    <filter> 
     <filter-name>RestrictPageFilter</filter-name> 
     <filter-class>gov.denis.chanceryweb5.filter.RestrictPageFilter</filter-class> 
    </filter> 

    <filter-mapping> 
     <filter-name>RestrictPageFilter</filter-name> 
     <url-pattern>/restricted/*</url-pattern> 
    </filter-mapping> 

Glassfish-web.xml

<glassfish-web-app> 
<security-role-mapping> 
    <role-name>ADMIN</role-name> 
    <group-name>ADMIN</group-name> 
    </security-role-mapping> 
    <security-role-mapping> 
    <role-name>USER</role-name> 
    <group-name>USER</group-name> 
    </security-role-mapping> 

Reich in Glasfischen gui Konsole: enter image description here

Wenn meine Web-App den Zugriff auf in Browser ich dies aus irgendeinem Grund? Warum?

enter image description here

+1

angegeben weiß nicht, ob dies im Zusammenhang auf „Authentifizierung“, was aber Ihre Filter sollen nicht auf allen Seiten mit * .xhtml abgebildet werden (es wird auf jeder Seite aufgerufen einschließlich Index). Sie sollten es nur auf eingeschränkten Seiten abbilden, von denen ich annehme, dass Index nicht ist. – Fallup

+0

also sollte ich 'login.xtml' aus Seiten verschieben, die ich einschränken möchte? – Melissaa

+1

Anmeldeseiten sollten keine Sicherheitsbeschränkungen aufweisen. Wie sehen Ihre Datenbanktabellen aus? Sie hatten sie bereits und versuchen, sie an JDBCRealm in GlassFish anzupassen? – rbento

Antwort

1

Sie sehen den Dialog mit der BASIC Authentifizierungsmethode zugeordnet.

Sie haben derzeit die login-config-Elemente Ihrer web.xml-Datei auskommentiert, so dass die Konfiguration nicht angewendet wird.

Glassfish 3-Server hat eine Standard-Login-config, die verwendet wird, wenn ein Benutzer bereitgestellt App Sicherheits-Einschränkung gibt aber nicht angibt, einen Login-Config ...

Die effektive Login-config für Ihre Anwendung sieht tatsächlich so etwas wie dies

<login-config> 
    <auth-method>BASIC</auth-method> 
    <realm-name>file</realm-name> 
    </login-config> 

Die Standard-Login-config wird in glassfish3/glassfish/domains/<your domain name here>/config/default-web.xml

+0

Danke für die Antwort. Ich habe login-config auskommentiert, weil Antwort auf die Frage ich verlinkt sagt, ich muss es durch Filter ersetzen. So ist es falsch? – Melissaa

+0

@Melissaa: Ich habe BalusC nie bekannt gegeben, eine Antwort zu bieten, die war falsch, wenn der Server Tomcat ist Leider ist es jedem Server erlaubt, in Bereichen, die nicht durch die Spezifikationen geregelt sind, einen Mehrwert zu erzielen. Dies ist ein Bereich, in dem sich TC und GF unterscheiden. Wenn Sie möchten, dass GlassFish sich wie Tomcat verhält In diesem speziellen Bereich können Sie das standardmäßige login-config-Element aus der Datei config/default-web.xml entfernen: – vkraemer

+0

Ich habe die Standard-Login-Konfiguration auskommentiert, aber es sieht so aus, als ob 'request.login (name, pass)' nicht funktioniert 'login-config' in web.xml – Melissaa

Verwandte Themen