当前使用struts2+shiro+spring进行开发,shiro控制认证和权限。
在applicationContext-shiro内设置了successUrl,但是实际业务需求是根据不同的登录人,跳转至不同的页面。
系统内有一个LoginAction方法
[code="java"]
Subject subject = SecurityUtils.getSubject();
UsernamePasswordToken loginToken = new UsernamePasswordToken(getUserName(), getPassword());
try{
subject.login(loginToken);
}catch (IncorrectCredentialsException e) {
LOG.warn("the username isn't exist.{}",getUserName());
return ERROR;
}catch(UnknownAccountException e){
LOG.warn("the username:{} and password:{} isn't correct.",new Object[]{getUserName(),getPassword()});
return ERROR;
}
[/code]
struts2内配置了相应的result
[code="java"]
/pages/web/recommendation.jsp
[/code]
现实情况是登录成功后并不受shiro控制,是根据struts2的result进行跳转的。
在网上也查过通过FormAuthenticationFilter的方式控制successUrl,但是对LoginAction并不起作用,执行LoginAction登录方法时,并不能调用onLoginSuccess方法。
查看shiro的filter机制,感觉它都是前置过滤。但是这种登录应该是判断loginUrl和配置的是否一样,然后在判断subject的authented状态的后置过滤性啊。(这是我的思路)
应该有人处理过类似的需求,还请帮忙说下这类需求的login逻辑要怎么写,shiro针对login的url和自定义filter要怎么配。
谢谢。