shiro安全框架-用户认证授权以及权限控制 (2)

说明:数据库中对应的有一个权限表,用户表,角色表,用户对应的角色表,角色对应的权限表,通过这几个表就能轻松实现不同用户的角色分配以及权限分配。

url过滤器(因为采用的是权限控制用url) package ; import org.apache.shiro.SecurityUtils; import org.apache.shiro.authz.UnauthorizedException; import org.apache.shiro.subject.Subject; import org.apache.shiro.web.filter.PathMatchingFilter; import org.apache.shiro.web.util.WebUtils; import org.springframework.beans.factory.annotation.Autowired; import ; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import java.util.Set; public class UrlPathMatchingFilter extends PathMatchingFilter { @Autowired PermService permService; @Override protected boolean onPreHandle(ServletRequest request, ServletResponse response, Object mappedValue) throws Exception { System.out.println("进来了PathMatchingFilter"); String requestUrl = getPathWithinApplication(request); System.out.println("PathMatchingFilter---"+requestUrl); Subject subject = SecurityUtils.getSubject(); if(!subject.isAuthenticated()){ // 未登录 WebUtils.issueRedirect(request,response,"/router/toLogin"); return false; } System.out.println("permService-----"+permService); boolean needInterceptor = permService.needInterceptor(requestUrl); // System.out.println("是否需要权限验证:"+needInterceptor); if(!needInterceptor){//如果数据库中没有该权限的信息,就直接放行 return true; }else{ boolean hasPermission = false; String userName = subject.getPrincipal().toString(); Set<String> permissionUrls = permService.getUrl(userName); for(String url:permissionUrls){ if(requestUrl.equals(url)){ hasPermission = true; } } if(hasPermission){ return true; }else{ UnauthorizedException e = new UnauthorizedException("当前用户没有访问"+requestUrl+"的权限"); subject.getSession().setAttribute("e",e) WebUtils.issueRedirect(request,response,"/router/nopower"); return false; } } } } 权限控制

在数据库中存放需要有权限操作的请求路径,然后前端可以用标签来验证用户是否拥有某个权限从而达到不同的数据显示给不同级别的用户。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpzyxw.html