具有自定义登录流程的Spring Security

时间:2019-06-14 07:08:23

标签: authentication spring-security

我试图在基于Struts的现有应用程序中添加具有弹簧安全性的spring。这是部分迁移。所有的新开发都应该在春季进行。

所以我想要的是

  • 用户访问安全网址
  • 如果用户未通过身份验证,Spring应该重定向到特定的URL(这将是Struts URL)
  • Old Struts模块完成对用户的身份验证工作后,它将一个对象保存在HTTP会话中,该对象描述了已认证的用户。
  • Spring应该从会话中获取此对象并验证用户身份。
  • 将用户重定向到请求的安全URL

我尝试使用formlogin().loginpage(<Struts_URL>)。同样在身份验证后的Struts代码中,我已经更新了Spring的SecurityContext

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(securedEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter
{
    @Override
    protected void configure(HttpSecurity pHttp) throws Exception
    {
        pHttp.antMatcher("/**").authorizeRequests()
        .anyRequest().authenticated()
        .and().formLogin().loginPage("/<Struts_Login_Entry>.do");
    }
    ...
    @Override
    public void configure(WebSecurity pWeb) throws Exception 
    {
        // All the Strtus URL has .do suffix so excluding it
        pWeb.ignoring().antMatchers("/*.do", "/portal/**");
    }
}

在Struts中进行身份验证之后

...
MyUserDetails lUserDetails = new MyUserDetails(pUserName, pRole);
Authentication auth = new UsernamePasswordAuthenticationToken(lUserDetails, null, lUserDetails.getAuthorities());
SecurityContext securityContext = SecurityContextHolder.getContext();
securityContext.setAuthentication(auth);
...

当用户访问任何Spring URL时,该用户将被重定向到Struts页面,但是即使该用户已通过身份验证,也会发生这种情况。

我对Spring Security不太熟悉,有什么建议或帮助吗?

0 个答案:

没有答案