Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java的web应用程序中,真实世界的登录过程是如何发生的?_Java - Fatal编程技术网

在Java的web应用程序中,真实世界的登录过程是如何发生的?

在Java的web应用程序中,真实世界的登录过程是如何发生的?,java,Java,对于Java web应用程序中发生的登录过程,我感到非常困惑。我阅读了许多关于jdbcRealm和JAAS的教程。但是,有一件事我不明白,我为什么要使用它们?我不能直接检查我的用户数据库吗?一旦他们成功登录到站点,我会在会话中存储一些变量作为标志。并可能在所有受限页面上检查该会话变量(我的意思是为受限资源url模式保留一个过滤器)。这个方法正确吗?这个方法听起来正确吗?如果是,那么为什么所有这些JAAS和jdbcRealm都会出现 其次,我试图在我的web应用程序中完全实现SAS(软件即服务),

对于Java web应用程序中发生的登录过程,我感到非常困惑。我阅读了许多关于jdbcRealm和JAAS的教程。但是,有一件事我不明白,我为什么要使用它们?我不能直接检查我的用户数据库吗?一旦他们成功登录到站点,我会在会话中存储一些变量作为标志。并可能在所有受限页面上检查该会话变量(我的意思是为受限资源url模式保留一个过滤器)。这个方法正确吗?这个方法听起来正确吗?如果是,那么为什么所有这些JAAS和jdbcRealm都会出现

其次,我试图在我的web应用程序中完全实现SAS(软件即服务),这意味着一切都是通过web服务完成的。如果我使用web服务,是否可以使用jdbcRealm?如果没有,那么可以使用JAAS吗?如果是的话,那么请给我举一些例子,它使用mySql作为数据库,然后进行身份验证和授权。我甚至听说了春季安全。但是,我对此也感到困惑,因为我如何将webservice与Spring安全性结合使用


请帮帮我。我真的很困惑。我读了sun的教程,但他们只是不断地谈论理论。对于程序员来说,为了理解一个简单的概念,他们首先展示了一个100页的理论,然后才最终得出一个示例。

许多真实世界的web应用程序正在向功能化方向发展。它们所做的与您所描述的非常相似,即在您的应用程序上运行某种代理,它将拦截请求并与负责维护用户、权限、组数据库的某个外部服务器检查cookie、会话、身份验证等,根据您配置it请求的方式,将允许或不允许角色等

这里的要点是,您应该能够编写应用程序,而不必过多地考虑交叉功能,如身份验证、授权等


你可以看看,

是的,你可以自己做

但是,这些东西是存在的,所以您不需要自己实现它。它们是由非常聪明的人写的,经过测试,很有效。如果您想自己做这件事,您确定不会引入任何bug吗?您确定用户无法绕过登录吗?(上次我看到有人自己实现了这一点,用户可以通过转到而不是输入的正常url来绕过所有url检查)

关于如何将jdbcrealm与Tomcat一起用于基本HTTP身份验证的示例,请参阅。 您可以按此处所述创建表等。在您的webapp中创建文件 META-INF/context.xml,可能如下所示:

<context>
<Realm className="org.apache.catalina.realm.JDBCRealm" debug="99"
      driverName="com.mysql.Driver"
   connectionURL="jdbc:mysql://localhost/mydb?user=dbuser&amp;password=dbpass"
       userTable="users" userNameCol="user_name" userCredCol="user_pass"
   userRoleTable="user_roles" roleNameCol="role_name"/>
</context>
<security-constraint>
    <web-resource-collection>
      <web-resource-name>Entire Application</web-resource-name>
      <url-pattern>/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
      <role-name>USER</role-name>
    </auth-constraint>
  </security-constraint>
<login-config>
  <auth-method>BASIC</auth-method>
  <realm-name>MyWebapp Login</realm-name>
</login-config>

然后将JDBC driver.jar文件放在$CATALINA_HOME/lib/中,就可以开始了。

Hello nos,我知道如何使用jdbcRealm。但我想知道,如何将它与Web服务结合使用?因为我的数据库位于远程,我通过webservice完成登录过程。如何在webservice中使用jdbcRealm?jdbcRealm的另一个问题是,它不允许我识别不同类型的角色?我有一些在管理员和普通用户之间通用的页面。现在,如果我使用JDBCrealm,并且普通用户访问该页面,它将开始显示实际上是用于管理的菜单。它不会区分管理员的共享资源和普通用户。如果您想要管理员的特殊功能,可以通过检查request.isUserInRole(…)来检查用户角色,并采取相应的操作。很难说您在web服务中执行了什么身份验证,如果您想手动进行登录(为什么?),就不能使用jdbcrealm。如果您只是想保护web服务,那么在“普通”webapp/url和web服务上使用jdbcrealm没有什么区别。如果您想以经过身份验证的用户身份登录数据库,那么就不能使用jdbc领域(注意,几乎没有人这样做,他们使用一个普通的数据库用户来连接数据库)。我的意思是,我有一个页面,比如login.jsf。当我单击它上的“登录”按钮时,应该调用一个web服务,它将依次调用EJB,并检查数据库中是否存在这样的用户?如果用户存在,则会重定向到home,否则会再次抛出login.jsf。这可以在jdbcRealm中完成吗?如果您有登录表单,您可以使用基于表单的登录,这里有一些信息。在本例中,您只需告诉tomcat您的login.jsp在哪里,它负责检查用户是否已登录,根据数据库检查用户名/密码,如果用户未登录,则重定向到login.jsp等,您不必在代码中执行任何操作来验证用户。(当然,这里有一些限制,这就是为什么spring security等框架会退出的原因,它给了您更多的自由和功能。可以说是以复杂性为代价的)。+1因为我同意您对JAAS的困惑。这似乎更适用于客户端应用程序,而不是三层解决方案,如典型的web应用程序。
insert into users values('bob','secretpassword');
insert into roles values('bob','USER');