在我使用shiro时,我发现需要多个loginURL,但是框架只提供了一个角色的登陆,我在网上找到了解决方法。
参考博客
在shiro多realm的情况下,让用户访问需要认证的页面时,不同的角色肯定需要不同的loginUrl
然而shiro的ShiroFilterFactoryBean只能写入一个loginUrl,此时需要用到ShiroFilterFactoryBean的setFilters方法,下面是解决办法。
以下是解决方法:
shiro底层是通过redirectToLogin方法使未认证的用户跳转到登陆页的,那么只需要重写这个方法即可。博主的项目中,用户的loginUrl有“/usr/”和“/login关键字”,管理员的loginUrl同理,有“/admin/”和“/login“关键字,那么只需要区分这两个路径即可。通过HttpServletRequest获取请求URI,通过判断URI中的关键字,决定跳转到哪个loginUrl。那么第一步就是重写redirectToLogin方法:
public class MyAuthenticationFilter extends FormAuthenticationFilter {
private static final String USR_LOGIN_URL = "/usr/page/login";
private static final String ADMIN_LOGIN_URL = "/admin/page/login";
@Override
protected void redirectToLogin(ServletRequest request, ServletResponse response) throws IOException{
HttpServletRequest httpServletRequest = (HttpServletRequest) request;