当前位置: 首页 > 面试题库 >

禁止在不登录Jsf2的情况下访问受限页面

谷星文
2023-03-14
问题内容

我有个问题。我想防止用户访问页面而不登录jsf2。当用户直接将受限制的页面网址写入浏览器时,他/她应该看不到该页面。就像上述情况那样,他/她必须被重定向到登录页面。如何以编程方式执行此操作?


问题答案:

这取决于您如何设置登录名。您似乎正在使用本地认证,其中将登录用户设置为会话范围的受管Bean的属性。因为使用Java
EE提供的容器管理登录名,已经考虑了防止访问受限页面。

假设你已经在某个URL模式,像所有的受限制的页面/app/*/secured/*等和你的会话范围的bean已经被管理bean的名字user,那么你可以使用一个过滤器的工作。实现以下doFilter()方法:

@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
    HttpServletRequest request = (HttpServletRequest) req;
    HttpServletResponse response = (HttpServletResponse) res;
    HttpSession session = request.getSession(false);
    User user = (session != null) ? (User) session.getAttribute("user") : null;

    if (user == null || !user.isLoggedIn()) {
        response.sendRedirect("/login.xhtml"); // No logged-in user found, so redirect to login page.
    } else {
        chain.doFilter(req, res); // Logged-in user found, so just continue request.
    }
}

将此过滤器映射到覆盖受限页面的URL模式。

此外,您需要确保已禁用这些页面上的浏览器缓存,否则最终用户在注销后仍将能够从浏览器缓存中看到它们。您也可以为此使用过滤器。您甚至可以在同一过滤器中执行此操作。



 类似资料:
  • 我们需要从专用 exchange/outlook 邮箱 (O365) 的联系人文件夹中读出通讯组列表。该进程必须作为服务运行,没有用户交互。 不幸的是,图形应用编程接口不支持分发列表(甚至图形测试版也不支持)。因此,我们必须使用另一个应用编程接口——我尝试使用EWS。 我成功地向我们的服务授予了full_access_as_app权限。然而,这允许读取和修改任何邮箱中的任何数据,这是一个安全风险。

  • 我使用https://github.com/kunalvarma05/dropbox-php-sdk我的php项目上传文件在dropbox。 在这里,我不需要任何用户使用Dropbox,它只适用于内部用户,因此我可以在我的Dropbox上上传文件。 我从Dropbox应用程序生成了访问令牌,一切正常,但令牌在一段时间后过期。我做了一次 Oauth 登录以重新生成令牌,但新令牌在一段时间后也过期了。

  • 在PHP中编码,我尝试初始化Spotify API,不使用重定向uri,只使用client_id和client_secret。我尝试下面的代码:从响应url中提取令牌-Spotify API,但我得到一个NULL结果 我想知道我是否可以在不要求用户登录的情况下访问令牌(参见https://developer.spotify.com/web-api/authorization-guide/#auth

  • 问题内容: 如何防止我的用户直接访问仅用于ajax调用的页面? 在ajax调用期间传递密钥似乎是一种解决方案,但是不处理没有密钥的访问。但是制作密钥也很容易,不是吗?查看源的诅咒… p / s:使用Apache作为Web服务器。 编辑:要回答原因,我的index.php中有jQuery ui- tabs,并且在这些选项卡中是带有脚本的表单,如果直接访问它们将不起作用。我不知道为什么用户会想要这样做

  • 问题内容: 以下App Engine处理程序在可以获取令牌的范围内起作用: 当连接到模板时,它会从Facebook获得令牌响应并愉快地显示它。但是,最好不要将用户重定向到example.com/?state=SOME_UNIQUE_VALUE&code=AQB0iYpAf8nMmX5blahblah# = 来完成登录。 有没有一种方法可以使用client.Get等来访问授权URL,遵循重​​定向,

  • 问题内容: 我正在尝试实现一种解决方案,以防止当网页内容大于视口时,iOS Safari中的iOS反弹效果。 我正在处理的页面的结构非常具体,与该页面非常相似 基本结构是基于引导的。 它的顶部有一个固定的导航栏。 它具有全屏背景幻灯片播放。 幻灯片的覆盖层固定在视口的底部。 有一个页脚元素,可以加载画布,并且仅在滚动内容时可见。 内容在导航栏后面滚动。 内容由位于导航栏下方20px的标题和位于视口