我想知道当前的方法是关于使用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上读到需要过滤器,但我不知道该怎么做.
我希望在用户登录系统后控制访问权限.
例如:
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) 我有一个用于登录的过滤器.它在"用户名"和"密码"字段上执行文本检查.当且仅当文本检查正确完成时,请求才会进入Servlet.后者执行必须与数据库交互的控件.这个链条是否正确?
我尝试在Web应用程序中创建登录表单.在我可以使用的JSP页面中
<%
String name = request.getParameter( "username" );
session.setAttribute( "theName", name );
%>
Run Code Online (Sandbox Code Playgroud)
但现在我使用JSF/Facelets进行Web应用程序我不知道如何在JSF Backing bean中为客户端创建会话,并检查用户是否已登录,因此它将重定向到登录页面.谁能帮我提一下这些问题的链接教程?谢谢你
现在我没有遇到映射到类Filter的web.xml代码的问题
@Override
public void init(FilterConfig filterConfig) throws ServletException {
this.config = filterConfig;
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
LoginController controller = (LoginController) req.getSession()
.getAttribute("loginController");
if (controller == null || !controller.isLoggedIn()) {
res.sendRedirect("../admin/login.xhtml");
} else {
chain.doFilter(request, response);
}
}
Run Code Online (Sandbox Code Playgroud)
并在web.xml我用<fitler>标签映射
<filter>
<filter-name>userLoginFilter</filter-name> …Run Code Online (Sandbox Code Playgroud) 我正在尝试保护使用JSF2.0构建的应用程序.
我很困惑人们什么时候选择使用像Shiro,Spring Security或owasp的esapi这样的安全替代品来留下容器管理的安全性.看过Stack Overflow上的一些相关问题后,我意识到JSF开发人员过去更喜欢基于容器的安全性.但我也强烈建议使用Apache Shiro.我是安全问题的新手,不知道可能是什么相关问题以及如何处理它们.因此,我正在寻找通过其默认设置/自己处理大多数安全问题的东西.
就我的应用程序需求而言,我有一个社交应用程序,具有不同角色的用户可以访问不同的页面集,并可以根据他们的角色在这些页面上使用不同级别的功能.
在那种情况下,您认为对我来说可能是一个很好的选择吗?
我个人已经确信选择Shiro,因为它易于使用并且为新手照顾大部分事情.
我正在寻找最佳实践答案.我想为GET请求做一些预处理.因此,例如,如果不允许用户查看该页面,则将其重定向到另一页面.但我不想使用普通的servlet过滤器,因为我想表达这种行为faces-config.xml.这是可能的,如何调用,怎么做?
我可以定义一些Filter bean,它还返回一个String,告诉faces-config.xml下一步该去哪里?
我用Google搜索,但只打了正常的过滤器.如果我使用的过滤器,可以一个@WebFilter是@ManagedBean在同一时间?还是那种糟糕的风格?
以下是使用过滤器的Java代码片段,如果用户名和密码也正确,则每次都会显示错误页面.请帮帮我,我对这个概念知之甚少.
String sql="select * from reg where username='"+user+"' and pass='"+pwd+"'";
rs=st.executeQuery(sql);
if(rs.next())
{
chain.doFilter(request,response);
}
else
sc.getRequestDispatcher("/error.html").forward(request,response);
Run Code Online (Sandbox Code Playgroud) 在Java Servlet的我想编程方式检查用户是否登录或没有.
我正在使用JSF2.我已经实现了一个自定义面部servlet,如下所示:
public class MyFacesServletWrapper extends MyFacesServlet {
// ...
}
Run Code Online (Sandbox Code Playgroud)
其中我正在进行一些授权检查并在用户未登录时发送重定向:
public void service(ServletRequest request, ServletResponse response) {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
if (...) {
String loginURL = req.getContextPath() + "/LoginPage.faces";
res.sendRedirect(loginURL);
}
}
Run Code Online (Sandbox Code Playgroud)
这在用户尝试导航到另一个页面时有效.但是,当JSF命令链接/按钮提交JSF表单时,这不起作用.该行sendRedirect()线被击中并执行,没有异常被抛出了,但用户停留在同一页面.基本上,根本没有视觉变化.
为什么这适用于页面导航,而不是表单提交?