相关疑难解决方法(0)

使用j_security_check在Java EE/JSF中执行用户身份验证

我想知道当前的方法是关于使用JSF 2.0(如果存在任何组件)和Java EE 6核心机制(登录/检查权限/注销)的Web应用程序的用户身份验证,其中包含用户信息保存在JPA中实体.Oracle Java EE教程在这方面有点稀疏(仅处理servlet).

没有使用整个其他框架,如Spring-Security(acegi)或Seam,但如果可能的话,试图用新的Java EE 6平台(Web配置文件).

authentication jsf jaas j-security-check java-ee

155
推荐指数
3
解决办法
14万
查看次数

是否可以使用密码腌制的容器管理身份验证?

我知道如何设置使用表单身份验证并使用消化密码(例如,SHA-256)的vanilla容器管理安全性.像这样的东西:

web.xml中

<login-config>
    <auth-method>FORM</auth-method>
    <realm-name>jdbc</realm-name>
    <form-login-config>
        <form-login-page>/login.jsf</form-login-page>
        <form-error-page>/login-error.jsf</form-error-page>
    </form-login-config>
</login-config>
Run Code Online (Sandbox Code Playgroud)

login.xhtml

<form action="j_security_check">
    <p><label>
        Username:<br/>
        <input type="text" name="j_username" />
    </label></p>
    <p><label>
        Password:<br/>
        <input type="password" name="j_password" />
    </label></p>
    <p>
        <button type="submit">Submit</button>
    </p>
</form>
Run Code Online (Sandbox Code Playgroud)

非常简单 - 但我真正希望能够做的是用全局盐和用户名加密密码.是的,我知道这并不理想,但现在,我只是在构建一个概念验证.

容器(GlassFish 3,在这种情况下)可以为我做这个,还是我必须编写自己的登录过滤器?我之前已经完成了(对于J2EE应用程序)但我的直觉告诉我,现在我必须采用更严格的方法来使用Java EE 6.

java jsf java-ee jsf-2 jaspic

5
推荐指数
1
解决办法
1725
查看次数

jsf过滤器似乎不起作用

我试图用jsf创建一个安全的登录页面,我使用这些代码片段作为解决方案,在这个问题中找到.我的问题是,我可以在不登录的情况下访问/restricted/secret.xhtml,没有重定向,就像没有应用过滤器一样,因为如果我直接去/restricted/secret.xhtml#{user.loggedIn评估为false,我仍然可以查看该页面.这是我的代码:

AuthFilter.java

public class AuthFilter implements Filter {

private FilterConfig config;

@Override
public void destroy() {
    this.config = null;
}

@Override
public void doFilter(ServletRequest req, ServletResponse resp,
        FilterChain ch) throws IOException, ServletException {

    HttpSession s =  ((HttpServletRequest) req).getSession();
    if (s.getAttribute(UserBean.CREDENTIAL)==null)
    {
        ((HttpServletResponse) resp).sendRedirect("/login.faces");
    }else
    {
        ch.doFilter(req, resp);
    }
}
@Override
public void init(FilterConfig config) throws ServletException {
    this.config = config;
}
}
Run Code Online (Sandbox Code Playgroud)

UserBean.java

@ManagedBean(name="user")
@SessionScoped
public class UserBean implements Serializable {

private String name;
private String password;
protected …
Run Code Online (Sandbox Code Playgroud)

jsf login faces-config servlet-filters

5
推荐指数
1
解决办法
4074
查看次数

如何限制未登录用户访问某些页面?(JSF 2.0)

我正在实现自己的身份验证机制,我想知道我在做什么是正确的,如果不是我怎么能正确地做到这一点.

首先解释我的身份验证机制如何工作:

- 我的用户的详细信息位于名为Role的对象中.该对象包含3个字段:

电子邮件:String

密码:String

用户类型:Enum

- 当用户访问系统时,对象Role将保存到会话中.

我的问题是:如何根据userType字段限制对用户(角色)访问某些页面?

这是我做但不起作用.

首先我有一个托管bean来检查usser是否被记录.

@ManagedBean
@RequestScoped
public class SecurityController {

    //Some attributes...


    public String redirectNotBuyer() {
        Role role = (Role) FacesContext.getCurrentInstance()
                .getExternalContext().getSessionMap().get("userRole");
        //Checks if user is logged
        if (role == null) {         
            // Please login
            //Add message to authentification
            return "login.xhtml";           
        } else if (role != null) {
            if (!role.getType().toString().equalsIgnoreCase("BUYER")) {
                // Buyer not authorized
                return "main.xhtml";
            }
        }       
        return null;
    }

    public String redirectNotSeller() {
        Role …
Run Code Online (Sandbox Code Playgroud)

java jsf java-ee java-ee-6 jsf-2

2
推荐指数
1
解决办法
2万
查看次数

受保护的URL将未受保护的webapge组件泄露给未经身份验证的用户

我相信通过<login-config>+ <security-constraint>+ <security-role>和通过使用实现JSF应用程序的安全性<filter>是两种不同的方式!是吗?

我尝试通过上面的第一种方法(使用<login-config>+ <security-constraint>+ <security-role>)实现安全性, 但发现我使用受保护和未受保护的HTML组件的受保护网页甚至向未经身份验证的用户提供了不受保护的资源.

我需要完全保护URL,以便受保护的URL甚至不会将该网页的任何部分泄露给未经身份验证的用户.我该怎么做?

而且,使用安全实施<filter>web.xml一种自我管理的方式来处理安全性?我相信,然后您可以在筛选/捕获每个请求时自定义更细粒度的安全性?

java security jsf container-managed

2
推荐指数
1
解决办法
2605
查看次数