我是靠谱客的博主 坚强蜗牛,最近开发中收集的这篇文章主要介绍springboot + shiro 多realm多loginUrl设置(动态改变loginUrl),觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
【springboot + shiro】多realm的多loginUrl设置(动态改变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;
String url = httpServletRequest.getRequestURI();
if(url.contains("/usr/"))
WebUtils.issueRedirect(request, response, USR_LOGIN_URL);
else if(url.contains("/admin/"))
WebUtils.issueRedirect(request, response, ADMIN_LOGIN_URL);
}
}
- 第二步,在ShiroConfig中,将filter注入到shiro的ShiroFilterFactoryBean,代码如下:
@Bean
public ShiroFilterFactoryBean getShiroFilterFactoryBean(
@BeanSecurityManager SecurityManager securityManager) {
ShiroFilterFactoryBean factoryBean = new ShiroFilterFactoryBean();
//设置安全管理器
factoryBean.setSecurityManager(securityManager);
Map<String, String> filterMap = addAuthenticationUrl(new LinkedHashMap<>());
Map<String, Filter> filters = factoryBean.getFilters();
// 将重写的Filter注入到factoryBean的filter中
filters.put("authc", new MyAuthenticationFilter());
factoryBean.setFilters(filters);
factoryBean.setFilterChainDefinitionMap(filterMap);
factoryBean.setUnauthorizedUrl("/admin/power/unauthorized.action");
return factoryBean;
}
完工睡觉!!
最后
以上就是坚强蜗牛为你收集整理的springboot + shiro 多realm多loginUrl设置(动态改变loginUrl)的全部内容,希望文章能够帮你解决springboot + shiro 多realm多loginUrl设置(动态改变loginUrl)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复