【发布时间】:2014-10-07 19:20:26
【问题描述】:
我在 Spring MVC 应用程序上使用 Spring Security。与其他示例不同,我正在实现接口 UserDetailsService。我已经为我将在下面发布的内容创建了一个 bean。我现在直接重定向到拒绝访问页面。我相信这是因为入口点参考。但不幸的是,我的主页是我的登录页面,有一个 HTML5 下拉菜单可以处理它。
登录服务
@Service("userDetailsService")
public class LoginServiceImpl implements UserDetailsService{
@Autowired private UserDao userDao;
@Autowired private Assembler assembler;
@Override
@Transactional
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
UserDetails userDetails = null;
User user = userDao.findByName(username);
if(user == null) { throw new UsernameNotFoundException("Wrong username or password");} //Never specify which one was it exactly
return assembler.buildUserFromUserEntity(user);
}
}
安全应用程序上下文 xml
<import resource="servlet-context.xml" />
<!-- Global Security settings -->
<security:global-method-security pre-post-annotations="enabled" />
<!-- Spring Security framework settings -->
<security:http use-expressions="true" auto-config="true" disable-url-rewriting="true" entry-point-ref="formAuthenticationEntryPoint">
<security:session-management>
<security:concurrency-control max-sessions="5" error-if-maximum-exceeded="false"/>
</security:session-management>
<security:intercept-url pattern="/*" requires-channel="any" access="permitAll" />
<security:intercept-url pattern="/**" requires-channel="any" access="permitAll" />
<security:custom-filter position="PRE_AUTH_FILTER" ref="siteminderFilter" />
</security:http>
<!-- queries to be run on data -->
<beans:bean id="formAuthenticationEntryPoint"
class="org.springframework.security.web.authentication.Http403ForbiddenEntryPoint"
/>
<bean id="siteminderFilter" class="org.springframework.security.web.authentication.preauth.RequestHeaderAuthenticationFilter">
<property name="principalRequestHeader" value="ROLE_USER"/>
<property name="authenticationManager" ref="authenticationManager"/>
</bean>
<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="LoginServiceImplementation"/>
</bean>
</property>
</bean>
<bean id="LoginServiceImplementation" class="com.WirTauschen.service.LoginServiceImpl"></bean>
<security:authentication-manager alias="authenticationManager">
<security:authentication-provider ref="preauthAuthProvider" />
</security:authentication-manager>
【问题讨论】:
-
你使用 Java 和 XML 来配置 Spring Security,我建议不要混合使用。选择你的毒药。
-
我也有同样的怀疑,我想避免上面名为 WebSecurityConfigurer 的 Java 文件,因为我已经实现了 userDetailsService 和 userDetails。我可以在不影响任何内容的情况下删除 java 文件吗?另外,入口点是怎么回事?
-
您可以将 WebSecurityConfigurerAdapter 重写为 XML。入口点就像登录页面。
-
不幸的是,我的登录页面是我的主页,其中有一个用于登录的 HTMl 下拉菜单。我已删除 WebSecurityConfigurer。并在 XML 中添加了一些东西。请看一下security-applicationContext.xml,我现在正在编辑帖子。
-
显然您想使用预身份验证但尚未设置预身份验证过滤器。所以什么都不会被填满。
标签: spring-mvc spring-security