通过直接更改JSF中的URL来限制用户访问页面

sho*_*uts 7 java jsf authorization

我的应用程序中有两种用户 - 客户和卖家.我PhaseListener在JSF中使用a 来阻止用户在不登录的情况下访问页面,但是在他们登录后我不知道如何阻止用户更改位置栏中的URL并访问他不允许的页面.例如,阻止客户访问卖家页面.

有没有人知道如何防止这种非法访问?

Bal*_*usC 8

分配用户组/角色和检查上,以及您的阶段监听器里(可能在技术上更是一个简单的Servlet过滤器,毕竟,一个阶段监听器是在幕后的目的很简单,即很笨拙,不运行在非JSF URL上).

例如,允许以#开头的URL /seller/仅由具有以下角色的用户访问SELLER:

if (url.startsWith("/seller/") && user.getRoles().contains(Role.SELLER)) {
    // Allow access.
} else {
    // Block access.
}
Run Code Online (Sandbox Code Playgroud)

请注意,此功能在许多身份验证框架中提供/内置,例如Java EE内置容器管理身份验证和第三方库Apache Shiro.您只需要一个简单的web.xml配置条目<security-constraint>或一些配置文件,例如Shiro中的INI文件.

也可以看看: