我想知道当前的方法是关于使用JSF 2.0(如果存在任何组件)和Java EE 6核心机制(登录/检查权限/注销)的Web应用程序的用户身份验证,其中包含用户信息保存在JPA中实体.Oracle Java EE教程在这方面有点稀疏(仅处理servlet).
这没有使用整个其他框架,如Spring-Security(acegi)或Seam,但如果可能的话,试图用新的Java EE 6平台(Web配置文件).
即使用户知道某些页面的URL,我也想阻止访问某些页面.例如,/localhost:8080/user/home.xhtml(需要先登录)如果没有记录则重定向到/index.xhtml.
在JSF中如何做到这一点?我在Google上读到需要过滤器,但我不知道该怎么做.
目前,我正在使用JSF 2.0,Tomcat 7和MongoDB开发一个Web项目.我有一个很大的问题,如何处理数据库中用户的会话管理和身份验证/授权.
我想要的结构如下:只有登录用户才能创建事件,每个人都可以看到创建的事件.
create.xhtml - >仅适用于已登录的用户.events.xhtml - >为大家公开.我计划的基本结构是:
create.xhtml)login.xhtml@SessionScoped进入比赛)问题是:
@SessionScoped注释?在Create.java或
LoginManager.java?如何根据登录用户的角色呈现JSF组件?我知道外部上下文暴露了主体,但是我应该如何在JSF中正确地进行呈现?在JSP中它会是这样的
<% isUserInRole(Roles.ADMIN) { %>
<button>Edit!</button>
<% } %>
Run Code Online (Sandbox Code Playgroud)
我如何以最好的方式在JSF中编写这个?我最好的猜测是渲染属性绑定到一个返回布尔值的支持bean的方法,但如果我必须只为管理员渲染一些导航项,那将引入一个无关的支持bean ...
Glassfish V3.1,JSF 2.x
防止用户角色执行操作.
在一个真实的案例中,我有这个:
public String delete() {
if(FacesContext.getCurrentInstance().getExternalContext().isUserInRole("administrator"){
//.....the action to perform
}
return "Denied";
}
Run Code Online (Sandbox Code Playgroud)
我希望我可以使用@RolesAllowed()EJB 的注释,但我不使用EJB而是使用ManagedBeans.所以问题是:有没有办法同时使用多个角色?一些解决方法!示例:如果必须允许对3个角色执行操作(管理员,主持人,经理).我有义务这样做:
if (FacesContext.getCurrentInstance().getExternalContext().isUserInRole("administrator")
|| FacesContext.getCurrentInstance().getExternalContext().isUserInRole("manager")
|| .....) {
//....
}
Run Code Online (Sandbox Code Playgroud)
重现所有方法都很痛苦.像数百种方法的东西:(
我的应用程序中有两种用户 - 客户和卖家.我PhaseListener在JSF中使用a 来阻止用户在不登录的情况下访问页面,但是在他们登录后我不知道如何阻止用户更改位置栏中的URL并访问他不允许的页面.例如,阻止客户访问卖家页面.
有没有人知道如何防止这种非法访问?
我想根据用户访问权限限制对某些JSF页面的访问.如何在JSF中做到这一点?我找到了两个链接:通过直接更改JSF中的URL来限制用户访问页面.但答案没有提到如何阻止访问页面.用response.sendError?第二个链接:JSF:如何控制JSF中的访问权限和权限?
还有什么最好使用PhaseListener或使用ServletFilter?
我希望在用户未登录时显示登录链接,并在用户登录时显示登出链接.我正在使用中定义的容器管理安全性web.xml.
我怎样才能做到这一点?