ssm系统拦截权限
1.系统权限的拦截
对于一个系统来说,系统当中的不同用户访问资源的权限也是不同的
对于系统来说,用户,角色,权限必不可少,通常都是通过5张表来实现系统的权限控制
用户表,用户角色关系表,角色表,角色权限关系表,权限表(菜单表)
- 不同的用户登陆,进来之后,看到的导航是一样的吗?
- 用户登陆成功后,根据用户id查询他的权限列表,动态的展示导航
- 怎么保证不同的用户,不能操作不属于他的权限?
- 全局的拦截器拦截每次请求,先判断请求资源地址是否是公开资源,如果不是,
- 判断用户是否登陆,假如登陆,通过用户id查询到用户的权限列表list,
- 拿着用户请求的资源地址和list进行对比,如果包含在其中,放行;
2.代码实现
- 自定义权限拦截器
package com.oracle.shop.security;
import com.oracle.shop.po.Menu;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.util.List;
/**
*@Description: 权限拦截器
*/
public class PremisstionInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//在请求处理之前判断用户请求的地址是否合法,如果不合法就执行响应的操作
//获取请求路径
String path = request.getRequestURI();
if (path.contains("/common")){
//请求公共资源
return true;
}else {
//访问非静态资源 判断用户是否登陆
HttpSession session = request.getSession(false);
if (null==session){//一定没有登陆
response.sendRedirect(request.getContextPath()+"/common/toLogin");
return false;
}else {
if (null==session.getAttribute("user")){
//用户没有登陆过
response.sendRedirect(request.getContextPath()+"/common/toLogin");
return false;
}else{
//用户登陆了,判断请求是否合法
//获取用户权限下,可以访问的页面列表
if (path.contains("/index")){
return true;
}else {
List<Menu> menuList = (List<Menu>)session.getAttribute("menuList");
//遍历查看请求是否合法
boolean check = false;
for (Menu menu:menuList){
if (path.contains(menu.getMenuKey())){
check = true;
break;
}
}
if (check){
return true;
}else {
response.sendRedirect(request.getContextPath()+"/common/noauth");
return false;
}
}
}
}
}
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
}
}
- 在springmvc.xml当中配置拦截器
<mvc:interceptors>
<mvc:interceptor>
<!--拦截的路径所有-->
<mvc:mapping path="/**"/>
<!--不拦共同资源-->
<mvc:exclude-mapping path="/common"/>
<bean class="com.oracle.shop.security.PremisstionInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>

浙公网安备 33010602011771号