我要求最终用户在注销/注销后不能返回受限页面.但目前最终用户可以通过浏览器后退按钮,访问浏览器历史记录或甚至通过在浏览器的地址栏中重新输入URL来实现.
基本上,我希望最终用户在注销后不能以任何方式访问受限制的页面.我怎样才能做到最好?我可以用JavaScript禁用后退按钮吗?
我正在展示非常敏感的数据.用户从我的服务器注销后,我不希望其他用户能够看到数据点击浏览器的"后退"按钮.
我怎样才能做到这一点?
目前,我正在使用JSF 2.0,Tomcat 7和MongoDB开发一个Web项目.我有一个很大的问题,如何处理数据库中用户的会话管理和身份验证/授权.
我想要的结构如下:只有登录用户才能创建事件,每个人都可以看到创建的事件.
create.xhtml - >仅适用于已登录的用户.events.xhtml - >为大家公开.我计划的基本结构是:
create.xhtml)login.xhtml@SessionScoped进入比赛)问题是:
@SessionScoped注释?在Create.java或
LoginManager.java?我希望在用户登录系统后控制访问权限.
例如:
administrator : can add, delete and give rights to employee
employee : fill forms only
...
Run Code Online (Sandbox Code Playgroud)
因此,在知道用户具有哪些权限后,检查数据库,我想限制该用户可以看到和执行的操作.有一个简单的方法吗?
编辑
@WebFilter("/integra/user/*")
public class LoginFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
HttpServletRequest req = (HttpServletRequest) request;
Authorization authorization = (Authorization) req.getSession().getAttribute("authorization");
if (authorization != null && authorization.isLoggedIn()) {
// User is logged in, so just continue request.
chain.doFilter(request, response);
} else {
// User is not logged in, so redirect to …Run Code Online (Sandbox Code Playgroud) 有没有办法将全局侦听器附加到JSF中的所有AJAX调用?也许通过阶段听众或其他什么?
这是一个难题...让我们说你正在使用f:ajax标签和像apache shiro之类的东西,你让你的会话到期.然后你回来并点击一个附有f:ajax的按钮.服务器将以302重定向响应登录页面.
用户什么也看不见.他们可以反复点击并调用ajax调用,但对他们来说应用程序只是"死了".
所以,我的问题是,有没有办法将监听器附加到JSF中的所有ajax调用?如果是这样,我想做的是监控响应代码.如果是重定向,请使用window.navigate沿途发送它们.
我总是乐于听取其他人如何解决这个问题!
我有一个Session scoped bean
import javax.faces.bean.SessionScoped;
import javax.inject.Named;
@Named
@SessionScoped
public class SessionBean implements Serializable{
Run Code Online (Sandbox Code Playgroud)
我在一个过滤器中进行了对象...
public class FiltroSeguridad implements Filter{
@Inject
private SessionBean sessionBean;
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpRequest = (HttpServletRequest) request;
sessionBean.setRutaRedirect(httpRequest.getRequestURI());
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我在下一次互动中使用SessionBean ...
@Model
public class CuentaUsuarioWebBean implements Serializable{
@Inject
private SessionBean sessionBean;
public void loginUsuario() throws IOException{
sessionBean.getRutaRedirect();
}
}
Run Code Online (Sandbox Code Playgroud)
但该属性getRutaRedirect()返回null
我通过CDI注释更改导入它仍然不起作用(javax.enterprise.context.SessionScoped),与JSF注释相同(javax.faces.bean.ManagedBean和@ManagedProperty).
谢谢.
PD:对不起我的英文!
我正在开发一个JSF应用程序。仅适用于授权用户。
因此,每当有人尝试通过URL访问任何页面时,都应重定向到Login。
我正在使用XHTML作为前端。并使用JSF框架。
我将Session Bean存储在Login Bean中。
不幸的是,我使用了Servlet和静态页面“ response.sendRedirect()”。
提前致谢。
我认为一种解决方案是将所有页面都放在WEB-INF中,但是一个问题是我正在使用resonse.sendRedirect(),而且我正在使用带有facelets的模板。
请给我建议。
文件夹中的“我的登录”页面
"/Common/Login.xhtml"
和一些页面
"/Admin/*.xhtml"
Run Code Online (Sandbox Code Playgroud)
和一些页面
`"Employee/*.ahtml"`
Run Code Online (Sandbox Code Playgroud)
如何为这2个文件夹Admin和Employee设置筛选器
我给了像这样,但要求不要加入Filter Servlet
<filter-mapping>
<filter-name>LoginFilter</filter-name>
<url-pattern>/faces/Admin/*</url-pattern>
<url-pattern>/faces/Employee/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>`
Run Code Online (Sandbox Code Playgroud)
如果我这样给
<url-pattern>/*</url-pattern>
Run Code Online (Sandbox Code Playgroud)
它会进入无限循环,请为此问题提供解决方案
在我的JSF应用程序中,我java.lang.SecurityException在用户未登录时抛出一个.在web.xml我重定向到login.jsf一个SecurityExceptionocurrs时.
现在我的问题是,当我查看服务器响应时,它是一个500 - Internal Server Error.我可以以某种方式抛出SecurityException并说它应该是一个401?
谢谢