首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring和Stripes安全设计

Spring和Stripes安全设计
EN

Stack Overflow用户
提问于 2009-05-13 00:18:42
回答 3查看 1.7K关注 0票数 3

我正在使用Stripes和Spring构建一个web应用程序。它需要具有登录/身份验证功能。现在,我将用户信息与用户凭证分开存储在数据库中。我的用户模型不包含凭据,因为我不想传递有价值的密码。

Spring管理着我所有的DAO。

现在,我正在实现一个基于非容器的安全系统。我存储了密码的sha-2散列,并对表单中提交的密码与数据库中存储的密码进行了比较。这种比较已经过测试,并且是有效的。我在想怎么把这东西连在一起。现在,我有一个捕获登录请求的LoginActionBean,并使用一个"PasswordService“单例,该单例在内部使用UserDAO来检索凭据并与提交的参数进行比较。我的spring bean是:

代码语言:javascript
复制
<bean id="passwordSerivce" class="com.example.store.authentication.PasswordService" factory-method="getInstance">
    <property name="userDAO" ref="userDAO"/>
</bean>

但是PasswordService单例需要一个:

代码语言:javascript
复制
public void setUserDAO(UserDAO userDAO) { ...}

方法,这在单例中没有实际意义(UserDAO是一个接口)。

我在找一个合适的设计。我读到过ServiceLocators正是Spring诞生的原因。有什么想法吗?

我还想知道我还能怎么设计这个。我有一个ActionBean,当用户单击“登录”时会调用它,但我如何实际进行身份验证。我要将身份验证服务注入bean吗?我要创建一个任何人都可以调用的单例吗?我有没有一个LoginAcionBean使用的通用接口来注入Spring?如果我没有使用Spring,那该怎么做呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-05-13 00:36:28

  1. 我不明白为什么注入工厂方法没有任何意义。
  2. 我不明白为什么你的xml使用userDao-
  3. =“getInstance”;你可以丢弃所有的实例和单例的东西;spring将实例化密码服务类的一个实例,并将其注入到需要它的任何类中,它们都将得到相同的实例。所以spring正在为你创建一个单例。密码服务类可以是一个简单的pojo。对于implementation.

userDao也是如此

我还建议查看、理解和使用spring注释。基本上,您可以在将要注入的类上使用@Service,然后在注入它的类中的setter上使用@Autowired。您还需要在xml配置文件中添加一些内容来打开注释内容。

票数 1
EN

Stack Overflow用户

发布于 2009-05-13 15:55:38

除了上面的答案,如果你不想为DAO设置一个setter,那么就使用构造函数注入:

代码语言:javascript
复制
<bean id="passwordSerivce" class="...PasswordService">
   <constructor-arg ref="userDAO"/>
</bean>

除非bean不是您控制的类,否则您不需要将其设置为Singleton,Spring将默认这样做。

我个人并不喜欢注释。

票数 1
EN

Stack Overflow用户

发布于 2009-05-16 01:32:19

我的解决方案是有一个带有"authenticate“方法的接口。然后创建一个服务类,它使用一个接受UserDAO对象的构造函数来实现接口。这样,请求服务的对象不会执行实例化(它是由spring完成的),并且不知道执行了什么底层实现(ldap、SSO、简单的密码比较等)。似乎完成了工作:P

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/855501

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档