我有一个Java JSF 2,Spring 3,Hibernate 4 Java EE应用程序,它使用第三方库来验证用户。我将所需的CA证书导入到JVM中,将第三个库添加到项目中并在web.xml中进行了配置。该库从智能卡读取用户详细信息。整个设置正常,用户将被第三方库带到主页。
以下是保护应用程序的要求。
我查看了这个链接,似乎" AuthenticationProcessingFilter"已被弃用,不适用于Spring 3!
我也看过这个,但我不明白需要哪些步骤/配置。
spring-security: authorization without authentication
如果有人能够概述仅使用授权实现Spring Security所需的所有项目,我将非常感激。这就是我想出来的。
1)使用spring 3 security更新pom,添加一个过滤器(我应该选择哪个过滤器)
2)自定义用户详细信息
3)自定义DaoAuthenticationProvider
4)在application-context.xml
中注册此自定义身份验证提供程序5)注册访问决策管理员进行授权
答案 0 :(得分:2)
适用于此用例的基本Spring Security类是org.springframework.security.web.authentication.preauth.AbstractPreAuthenticatedProcessingFilter和org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationProvider。
如果您当前的身份验证库导致用户以标准Java EE方式进行身份验证(即在HttpServletRequest实例上调用getUserPrincipal(),则返回经过身份验证的用户的Principal)您需要执行的操作应该类似到:
为Spring Security添加以下设置:
<!-- Declare the user details for database check -->
<bean id="userDetails" class="com.yourpackage.DatabaseUserDetails"/>
<!-- Default empty auth manager -->
<security:authentication-manager alias="authenticationManager"/>
<!-- Use default settings from the jee namespace -->
<security:http>
<security:jee mappable-roles="IS_AUTHENTICATED_FULLY" user-service-ref="userDetails"/>
</security:http>
配置Spring Security以根据您的要求执行授权
安全性:jee初始化过滤器和身份验证提供程序,并将您的用户服务插入提供程序。
如果您当前的身份验证库没有使用Java EE机制,您将需要实现自己的AbstractPreAuthenticatedProcessingFilter子类,该子类知道如何识别用户已经过身份验证。
然后,您将使用自己的默认预过滤器替换默认的预认证过滤器,因此配置如下所示:
<!-- Declare the user details for database check -->
<bean id="userDetails" class="com.yourpackage.DatabaseUserDetails"/>
<!-- Define provider -->
<bean id="preauthAuthProvider" class="org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationProvider">
<property name="preAuthenticatedUserDetailsService">
<bean id="userDetailsServiceWrapper"
class="org.springframework.security.core.userdetails.UserDetailsByNameServiceWrapper">
<property name="userDetailsService" ref="userDetails"/>
</bean>
</property>
</bean>
<!-- Define alias for the authentication manager -->
<authentication-manager alias="authenticationManager">
<security:authentication-provider ref="preauthAuthProvider" />
</authentication-manager>
<!-- Declare the custom filter -->
<bean id="authenticationFilter" class="com.yourpackage.AuthenticationFilter">
<property name="authenticationManager" ref="authenticationManager"/>
</bean>
<security:http>
<security:custom-filter ref="authenticationFilter" position="PRE_AUTH_FILTER"/>
</security:http>
您可以在Spring Security documentation中找到更多详情。