相关疑难解决方法(0)

如何在应用程序上使用新用户登录创建新会话?

一旦新用户登录应用程序,如何在JSF 2.0中创建新会话?

session jsf jsf-2

7
推荐指数
1
解决办法
1万
查看次数

用户登录后如何限制使用JSF 2访问某些页面?

我想根据用户访问权限限制对某些JSF页面的访问.如何在JSF中做到这一点?我找到了两个链接:通过直接更改JSF中的URL来限制用户访问页面.但答案没有提到如何阻止访问页面.用response.sendError?第二个链接:JSF:如何控制JSF中的访问权限和权限?

还有什么最好使用PhaseListener或使用ServletFilter?

security jsf-2

6
推荐指数
1
解决办法
4519
查看次数

java会话管理

我正在使用一个小型webapp来获得乐趣,目前只使用Java Servlet.我有两个页面,test1和test2.目前我在test1中创建一个新会话,如下所示:

    HttpSession session = request.getSession(true);
    if (session.isNew() == false) {
        session.invalidate();
        session = request.getSession (true);
    }
Run Code Online (Sandbox Code Playgroud)

在test2中,我正在检索会话,如下所示:

    HttpSession session = request.getSession(false);
    if (session == null) {
        throw new ServletException ("No session.");
    }
Run Code Online (Sandbox Code Playgroud)

所以问题是如果我先去test2,我总是得到一个有效的会话,因为浏览器会创建一个.我想限制从test1到test2的流程,所以我必须先进入test1.我的计划是最终创建一个创建会话的登录页面,但我在这里看到的问题仍然存在.

我该怎么处理?我希望任何想法都不包括第三方库.我这样做是为了学习练习.

谢谢!

java servlets java-ee

3
推荐指数
1
解决办法
7162
查看次数

JSF身份验证

我正在开发一个Java EE应用程序(JSF2 + richfaces + Facelets + Tomcat).使用JSF时执行身份验证的最佳方法是什么?或者我应该自己做?

java authentication jsf web-applications jsf-2

3
推荐指数
1
解决办法
1939
查看次数

使用PhaseListener而不是Servlet过滤器进行授权的限制

我目前正在使用PhaseListener如下方法来执行用户授权.

private PhaseId phaseId = PhaseId.RESTORE_VIEW;

@Override
public void afterPhase(PhaseEvent event) {

    FacesContext fc = event.getFacesContext();
    boolean isOnAllowedPage = false;
    String[] allowedPages = choseRightPages(); // chose pages for role

    for (String s : allowedPages) {
        if (fc.getViewRoot().getViewId().lastIndexOf(s) > -1) {
            isOnAllowedPage = true;
            break;
        }
    }

    if (!isOnAllowedPage) {
        NavigationHandler nh = fc.getApplication().getNavigationHandler();
        nh.handleNavigation(fc, null, "prohibited");
    }
}
Run Code Online (Sandbox Code Playgroud)

它做我想要的,但我没有看到它列在如何处理数据库中的用户的身份验证/授权?这个名为"使用phaselistener问题的授权"的Coderanch主题也提到了以下内容:

您不应该将与JSF紧密相关的授权结合在一起.更好地利用容器管理的身份验证和/或作用于覆盖受保护页面的url模式的简单过滤器.

我并不完全理解在执行用户授权时使用a PhaseListener而不是a 的限制Filter.有人可以向我解释一下吗?

jsf authorization jsf-2 servlet-filters phaselistener

3
推荐指数
1
解决办法
1057
查看次数

URL重定向不适用于preRenderView事件

我终于在页面之间传递了消息,但这并没有将我重定向到用户登录页面(../../index.xhtml),而是显示了禁止的页面:

public String permission() throws IOException {
    FacesContext context = FacesContext.getCurrentInstance();
    Map<String, Object> sessionMap = context.getExternalContext().getSessionMap();
    String isLog = (String) sessionMap.get("isLogged");

    if(isLog != "TRUE") {

        System.out.println("*** The user has no permission to visit this page. *** ");
        context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Info : ", "Loggez-vous"));
        context.getExternalContext().getFlash().setKeepMessages(true);
        //context.getExternalContext().redirect("../../index.xhtml");
        return "../../index.xhtml?faces-redirect=true";


    } else {
        System.out.println("*** The session is still active. User is logged in. *** ");
    }
    return "../../index.xhtml?faces-redirect=true";
}
Run Code Online (Sandbox Code Playgroud)

当然,限制页面有这个:

<f:event type="preRenderView" listener="#{userloginMB.permission()}"/>
Run Code Online (Sandbox Code Playgroud)

使用get external context重定向会使消息丢失.

jsf redirect prerenderview jsf-2.2

2
推荐指数
1
解决办法
1434
查看次数