标签: j-security-check

使用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万
查看次数

如何使用j_security_check获取连接用户的数量及其角色?

我通过托管bean以这种方式获取连接用户的用户名(使用j_security_check):

......
    username =   FacesContext.getCurrentInstance().getExternalContext().getUserPrincipal().getName();
Run Code Online (Sandbox Code Playgroud)

然后以这种方式在jsf页面中显示它:#{userBean.username} 但我认为无法获得连接用户数量并获得他们的角色.换句话说,除了用户名,用户角色和连接用户数之外,我还要显示. 我怎样才能做到这一点!?在此先感谢您的帮助!

编辑:我现在可以使用托管bean中的namedquery获取连接用户的角色:

public Users getUserRole(){
      try {
            Users auser = (Users)
            em.createNamedQuery("Users.findByUsername").
                    setParameter("username", getRemoteUser()).getSingleResult();
            return auser; 
        } catch (NoResultException nre) {
            JsfUtil.addErrorMessage(nre, "getUserRole Error");
            return null;
        }

    }
Run Code Online (Sandbox Code Playgroud)

并在xhtml页面中:

<h:outputLabel for="rolefacet" value="Role: "/>
  <h:outputFormat id="rolefacet" value="#{UserBean.userRole.ugroup}" /> 
Run Code Online (Sandbox Code Playgroud)

而ugroup是Users实体类中的角色名称.


编辑:一个仍然不适合我的解决方案是在我的web.xml中添加一个HttpSessionListener:

package beans;

/**
 *
 * @author med81
 */

import java.io.Serializable;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
import javax.servlet.http.HttpSession;
import java.util.List;
import java.util.ArrayList;

import javax.faces.context.FacesContext;


public class SessionCounter implements …
Run Code Online (Sandbox Code Playgroud)

jsf j-security-check userprincipal java-ee-5

9
推荐指数
2
解决办法
8252
查看次数

在j_security_check之后执行操作?

我正在做一个记录用户操作的审计系统.我需要记录用户执行登录的时间.我搜索了不同的地方,但我总是遇到同样的解决方案,使用"过滤器".

以上解决方案对我不起作用.没有其他解决方案使用过滤器或进行自定义登录?

我正在使用带有GlassFish 3的Java 7

action login jaas j-security-check java-ee

7
推荐指数
0
解决办法
184
查看次数

j_security_check重定向

我正在学习Tomcat环境下的Java servlet.我正在学习如何使用j_security_check使用基于表单的登录身份验证.所以,在我的servlet中,我有一个具有j_username和j_password的登录页面.在该servlet的web.xml文件中,我有一个欢迎页面列表,指示我的登录页面"landing.html".因此,理想情况下,成功登录后,我希望用户重定向到"landing.html"页面.

如果没有身份验证(没有基于表单的身份验证),我的servlet会打开并按预期转到"landing.html"页面("localhost:8080/MyServlet" - 显示landing.html的内容).

但是,现在,在成功登录j_security_check之后,出于某种原因,我会自动重定向到.landing文件的.css文件.我不明白为什么会这样.

是否有一种特殊方式可以告诉服务器在成功验证后加载"landing.html"页面而不将其转发到其他任何地方?

编辑

*好的,我解决了.成功验证后加载的css文件列在<head></head>login.html页面的标签中,其中j_username和j_password是.我添加了css文件,使登录页面的设计与网站的其余部分一致.我的猜测是,当服务器重新加载所需资源时,由于某种原因,它只是从头标记重新加载顶部css文件.真的很奇怪.那么,j_security_check是对Tomcat上的网站进行任何身份验证的最佳方式,还是有更好更可靠的方式?*

java servlets j-security-check

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

如果JSF页面受j_security_check保护,则不会在ajax请求上抛出ViewExpiredException

我有一个不受保护的JSF页面j_security_check.我执行以下步骤:

  1. 在浏览器中打开JSF页面.
  2. 重启服务器.
  3. 单击JSF页面上的命令按钮以启动ajax调用.

Firebug显示a ViewExpiredException正如预期的那样被提升.

帖子:

javax.faces.ViewState=8887124636062606698:-1513851009188353364
Run Code Online (Sandbox Code Playgroud)

响应:

<partial-response>
<error>
<error-name>class javax.faces.application.ViewExpiredException</error-name>
<error-message>viewId:/viewer.xhtml - View /viewer.xhtml could not be restored.</error-message>
</error>
</partial-response>
Run Code Online (Sandbox Code Playgroud)

但是,一旦我将页面配置为受保护j_security_check并执行上面列出的相同步骤,奇怪的是(对我而言)ViewExpiredException不再引发.相反,响应只是一种新的视图状态.

帖子:

javax.faces.ViewState=-4873187770744721574:8069938124611303615
Run Code Online (Sandbox Code Playgroud)

响应:

<partial-response>
<changes>
<update id="javax.faces.ViewState">234065619769382809:-4498953143834600826</update>
</changes>
</partial-response>
Run Code Online (Sandbox Code Playgroud)

有人可以帮我解决这个问题吗?我希望它引发异常,以便我可以处理该异常并显示错误页面.现在它只是响应一个新的ViewState,我的页面卡住了没有任何视觉反馈.

ajax j-security-check jsf-2 viewexpiredexception

6
推荐指数
1
解决办法
8051
查看次数

使用HttpClient进行基于表单的身份验证 - j_security_check

我正在尝试使用Apache HttpClient Java库对使用基于表单的身份验证(例如,facebook.com)的网站进行身份验证.
使用这个网站的程序作为一个主要的例子:http://www.elitejavacoder.com/2013/10/http-client-form-b​​ased-authentication.html,我能够做到 - 但有一些事情,我我不理解这个节目.这是代码:

package com.elitejavacoder.http.client;

import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpEntity;
import org.apache.http.HttpHost;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.params.ClientPNames;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;

public class HttpClientFormAuthentication {
    public static void main(String[] agrs) {
        String host = "yourhostname.com";
        int port = 8080;
        String protocol = "http";

        DefaultHttpClient client = new DefaultHttpClient();

        try {
            HttpHost httpHost = new HttpHost(host, port, protocol);
            client.getParams().setParameter(ClientPNames.DEFAULT_HOST, httpHost);

            HttpGet securedResource = new …
Run Code Online (Sandbox Code Playgroud)

java j-security-check form-authentication apache-httpclient-4.x

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

在使用j_security_check成功验证后,如何在index.jsp上获取j_username?

我在login.jsp上使用j_security_check.服务器是GlassFish Server 3.一切正常,当用户通过身份验证后,它会打开index.jsp.我的问题是我需要在index.jsp中获取j_username,但我找不到这样做的方法.我找到的所有解决方案都是Java,我需要一些适合我的jsp的东西.

有任何想法吗?非常感谢你提前!

jsp glassfish username j-security-check

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

如何在Apache Tomcat 7中设置JDBCRealm?

我希望用户(允许登录我的网站)从MySQL数据库加载.为此,我想为我的Apache Tomcat 7应用程序服务器设置JDBCRealm.

我已经阅读了文档并使用JNDI资源(jdbc/foo4)创建了数据库连接.此资源有效(我已在我的应用程序中使用它来检索数据).这似乎不起作用,是一个领域与这个资源的链接.

我的配置文件如下所示:

SRC \主\ web应用程序\ META-INF\context.xml的

<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path="/my-webapp">
  <!-- works! -->
  <Resource name="jdbc/foo4"
            type="javax.sql.DataSource"
            factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
            driverClassName="com.mysql.jdbc.Driver"
            url="jdbc:mysql://localhost:3306/foo4"
            username="root"
            password="root"
            maxActive="8" 
            maxIdle="4" 
            maxWait="10000"
            auth="Container"
          />
  <!-- Does not seem to work?! -->
  <Realm className="org.apache.catalina.realm.DataSourceRealm"
         dataSourceName="jdbc/foo4"
         userTable="users" 
         userNameCol="user_name" 
         userCredCol="user_pass"
         userRoleTable="user_roles" 
         roleNameCol="role_name"/>
</Context>
Run Code Online (Sandbox Code Playgroud)

在我的标准部署描述符中,我输入了以下内容:

SRC \主\ web应用\ WEB-INF\web.xml中

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
  <security-constraint>
    <display-name>General Restriction</display-name>
    <web-resource-collection>
      <web-resource-name>Entire Application</web-resource-name>
      <description>All resources in this application are protected.</description>
      <url-pattern>/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
      <role-name>admin</role-name> …
Run Code Online (Sandbox Code Playgroud)

mysql tomcat jdbc j-security-check jdbcrealm

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

j_security_check直接调用

我有一个Web应用程序,我希望主页包含一个登录表单,以及其他数据.如果用户选择登录,则应将其重定向到另一个页面(例如login_success.jsp).我的问题是:我可以使用j_security_check机制登录,或者唯一的方法是使用托管bean来处理登录?

我的主页看起来像这样:

....
    <form action="j_security_check" method="POST" name="loginForm">
        <h:panelGrid columns="2">
            <h:outputLabel id="userNameLabel" for="j_username" value="#{label.home_username}:" />
            <h:inputText id="j_username" autocomplete="off" />
            <h:outputLabel id="passwordLabel" for="j_password" value="#{label.home_password}:" />
            <h:inputSecret id="j_password" autocomplete="off" />

            <h:panelGroup>
                <h:commandButton type="submit" value="Login" />
                <h:commandButton type="reset" value="Clear" />
            </h:panelGroup>
        </h:panelGrid>
    </form>
...
Run Code Online (Sandbox Code Playgroud)

如果我按下登录按钮,我得到 - > HTTP状态400 - 对表单登录页面的无效直接引用.很明显,j_security_check机制不知道在哪里"重定向",因为我以前没有请求过受保护的资源.

jsf login j-security-check

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

登录页面上的Jboss Wildfly 8.1会话超时

我有一个在JBoss 8.1上运行的应用程序,基于JAAS表单的登录(j_security_check),一切正常.

我的问题是:1)用户注销并在登录页面上重定向2)这里发生会话超时(用户不知道这一点)3)用户返回并正确登录=> BAM:他被重定向到j_security_check(URI以j_security_check结尾),但页面为空.

我的猜测是:JBoss不再知道先前请求的页面,因为会话超时发生并且此信息丢失.所以JBoss不知道在哪里发送现在登录的用户,页面保持空白.

我发现了一些帖子,但没有真正的答案/解决方案.谢谢你的帮助!

jboss login session-timeout j-security-check

5
推荐指数
0
解决办法
809
查看次数