0

JSF を使用して、secure/ ディレクトリの下の特定のページに入る前にユーザー認証/チェックを作成していますが、成功しませんでした... Phaselistener とフィルターの両方を試しましたが、まだ... どんな助けも大歓迎です。

私はEclipse Junoを使用しています。

私の web.xml は次のとおりです。

<filter>
<filter-name>AuthorizationFilter</filter-name>
<filter-class>login.security.AuthorizationFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>AuthorizationFilter</filter-name>
<url-pattern>/secure/*</url-pattern>
</filter-mapping> 
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>

AuthorizationFilter は次のようになります。

public class AuthorizationFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain  chain) throws ServletException, IOException {    
HttpServletRequest req = (HttpServletRequest) request;
login.Login_bean login_bean = (login.Login_bean)
req.getSession().getAttribute("username");
if (login_bean != null && login_bean.isLoggedIn()) {
chain.doFilter(request, response);
} else {
HttpServletResponse res = (HttpServletResponse) response;
res.sendRedirect(req.getContextPath() + "/index.xhtml");
}
}

オーバーライドされた destroy() と init を使用します。周りのいくつかのサイトからのコピペです。

Login_bean は管理され、セッション スコープが設定されており、ユーザーとパスのペアが正しい場合は、次のように実行されます。

if(password.equals(dbpassword)){
FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("username", username);
FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("email", email);
this.visibleLogout="true";
this.visibleLogin="false";
return "valid";
}

ディレクトリ構造は次のようになります。

WebContent
-> secure
    -> projects.xhtml
-> index.xhtml

アクセスを禁止したいindex.xhtml:

<p:menuitem id="projects" value="#{menuBean.projectsValue}" action="#{menuBean.navTo(projects)}" icon="ui-icon-circle-triangle-e" />.

最後に menuBean.navTo() は次のとおりです。

public String navTo(String whereTo)
{
return "/secure/projects";
}

どういうわけか壁にぶつかりました.. url-pattern を /faces/secure/* に変更しても、projects.xhtml に転送されます

完全な faces-config.xml

<?xml version="1.0" encoding="UTF-8"?>

<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_1.xsd"
    version="2.1">


    <managed-bean>
        <managed-bean-name>languageBean</managed-bean-name>
        <managed-bean-class>languageControl.LanguageBean</managed-bean-class>
        <managed-bean-scope>session</managed-bean-scope>
    </managed-bean>

    <managed-bean>
        <managed-bean-name>menuBean</managed-bean-name>
        <managed-bean-class>menuControl.MenuBean</managed-bean-class>
        <managed-bean-scope>session</managed-bean-scope>
    </managed-bean>

    <navigation-rule>
        <description>login_rule</description>
        <from-view-id>/index.xhtml</from-view-id>
        <navigation-case>
            <from-action>#{login_bean.checkValidUser}</from-action>
            <from-outcome>valid</from-outcome>
            <to-view-id>/nav.xhtml</to-view-id>
        </navigation-case>
        <navigation-case>
            <from-action>#{login_bean.checkValidUser}</from-action>
            <from-outcome>invalid</from-outcome>
            <to-view-id>/index.xhtml</to-view-id>
        </navigation-case>
    </navigation-rule>

    <application>
        <locale-config>
            <default-locale>en</default-locale>
            <supported-locale>gr</supported-locale>
        </locale-config>
        <resource-bundle>
            <base-name>languageControl.messages</base-name>
            <var>msg</var>
        </resource-bundle>
    </application>
    <validator>
        <validator-id>passwordValidator</validator-id>
        <validator-class>registration.passwordValidator</validator-class>
    </validator>
    <managed-bean>
        <managed-bean-name>Login_bean</managed-bean-name>
        <managed-bean-class>login.Login_bean</managed-bean-class>
        <managed-bean-scope>session</managed-bean-scope>
    </managed-bean>
    <managed-bean>
        <managed-bean-name>sendMail</managed-bean-name>
        <managed-bean-class>common.sendMail</managed-bean-class>
        <managed-bean-scope>request</managed-bean-scope>
        <!-- <managed-property> <property-name>email</property-name> <value>#{sendMail.email}</value> 
            </managed-property> -->
    </managed-bean>

    <validator>
        <validator-id>EmailValidator</validator-id>
        <validator-class>registration.EmailValidator</validator-class>
    </validator>

    <managed-bean>
        <managed-bean-name>RegistrationBean</managed-bean-name>
        <managed-bean-class>registration.RegistrationBean</managed-bean-class>
        <managed-bean-scope>session</managed-bean-scope>
    </managed-bean>
</faces-config>

完全な 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"
    id="WebApp_ID" version="3.0">
    <display-name>personalSite</display-name>
    <welcome-file-list>
        <welcome-file>index.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>

<filter>
        <filter-name>AuthorizationFilter</filter-name>
        <filter-class>login.security.AuthorizationFilter</filter-class>
 </filter>
 <filter-mapping>
        <filter-name>AuthorizationFilter</filter-name>
        <url-pattern>/secure/*</url-pattern>
 </filter-mapping> 

</web-app>
4

1 に答える 1

0

これをデバッガで実行していますか?「doFilter()」の先頭にブレークポイントを置き、フィルターが実行されているかどうかを確認します。実際に実行されているかどうかを確認したら、コードをステップ実行して (フィルタリングしていると仮定して)、ロジックが期待どおりに実行されない理由を確認します。発火していない場合は、設定に何か偽りがある可能性が高いと言えます。

于 2012-07-28T23:19:59.003 に答える