我对Java web应用程序中发生的登录过程感到非常困惑。我阅读了很多关于jdbcRealm和JAAS的教程。但是,有一件事我不明白,那就是我为什么要使用它们?我不能简单地直接检查我的用户数据库吗?一旦他们成功登录到站点,我就将一些变量作为标志存储在会话中。可能会检查所有受限页面上的会话变量(我的意思是保留受限资源url模式的过滤器).If不存在该标志,只需将用户重定向到登录页面即可。这种方法正确吗?这种方法听起来正确吗?如果是,那么为什么所有这些JAAS和jdbcRealm都会出现?
其次,我试图在我的web应用程序中完全实现SAS(软件即服务),这意味着所有的事情都是通过web services.If完成的,我使用webservices,可以使用jdbcRealm吗?如果不是,那么是否可以使用JAAS?如果是,那么请给我一些例子,使用mySql作为一个数据库,然后认证和授权。我甚至听说过Spring Security。但是,在如何将webservice与Spring Security结合使用的意义上,我也对此感到困惑。
请帮帮我。我真的很困惑。我读了sun的教程,但他们一直在谈论理论。对于程序员来说,要理解一个简单的概念,他们首先展示一个100页的理论,然后再来看一个例子。
发布于 2010-03-18 17:48:03
是的,你可以自己做。
然而,这些东西是存在的,所以你不需要自己去实现它。它们是由非常聪明的人编写的,它们经过测试,它是有效的。如果你想自己做这件事,你确定不会引入任何bug吗?您确定用户不能绕过登录吗?(上一次我看到有人自己实现了这一点,用户可以通过转到http://site.com/foo/../foo/bar而不是输入普通的http://site.com/foo/bar地址来简单地绕过所有的url检查)
关于如何在Tomcat中使用jdbcrealm进行基本的HTTP身份验证的示例,请参见here。您可以按照此处所述创建表等。在您的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&password=dbpass"
userTable="users" userNameCol="user_name" userCredCol="user_pass"
userRoleTable="user_roles" roleNameCol="role_name"/>
</context>在WEB-INF/web.xml中添加如下内容:
<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>(此密码保护您的整个web应用程序,您可以将其限制为仅限您的web服务的URL。具有角色USER的经过身份验证的用户将被授予访问权限。
向数据库添加一个用户,使用类似以下SQL的语句
insert into users values('bob','secretpassword');
insert into roles values('bob','USER');然后,将JDBC驱动程序.jar文件放在$CATALINA_HOME/lib/中,就可以了。
发布于 2010-03-18 17:44:47
许多现实世界中的web应用程序都在向Single Sign On功能发展。它们所做的事情与您所描述的非常相似,即将有某种类型的代理运行在您的应用程序上,该代理将拦截请求并检查cookie、会话、身份验证等与一些外部服务器,该服务器负责维护用户、权限、组、角色等的数据库。根据您如何配置,请求将被允许或被拒绝。
这里的要点是,你应该能够编写你的应用程序,而不需要太多的横切功能,比如身份验证,授权等。
你可以看看OpenSSO,OpenSSO wiki,others
https://stackoverflow.com/questions/2468477
复制相似问题