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>