注解这样写,我用的是数组的形式可以传多个
import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface ULifePermission { String[] value() default {}; }
实例接口如下
@ULifePermission({"2100","2101","2012","2103","2104","2015","2106","2107"}) @RequestMapping("/page/{v}") @ResponseBody public ResultBean searchCompany( @RequestParam(required = false) String name, @RequestParam(required = false) String adcode, @RequestParam(defaultValue="1") Integer pageIndex, @RequestParam(defaultValue="20") Integer pageSize, @RequestParam(required = true) String safetyId, @RequestParam(required = true) String addRoleId, @RequestParam(required = false) String addCompId, @RequestParam(required = false) String addStoreId) { try { PageBean<SysCompanyLMvo> companys = companyService.searchCompany(name, adcode, pageIndex, pageSize, addRoleId, addCompId, addStoreId); return ResultUtil.returnResult(companys, "查询企业成功"); } catch (Exception e) { log.error(e.getMessage()); return ResultUtil.returnResult(e); } }
过滤器如下
public class MainFilter extends HandlerInterceptorAdapter { private static Logger log = LoggerFactory.getLogger(MainFilter.class); @Resource(name = "commonService") private ICommonService commonService; @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { String path = request.getRequestURI(); ULifePermission permissionAnnotation = ((HandlerMethod) handler).getMethod().getDeclaredAnnotation(ULifePermission.class); String[] permission = permissionAnnotation == null ? null : permissionAnnotation.value(); log.debug(path + "(" + StringUtils.join(permission, "|") + ")"); try { commonService.checkUser(request, permission); } catch (Exception e) { log.error(e.getMessage()); response.setContentType("text/html;charset=utf-8"); response.getWriter().write(ResultUtil.returnJson(e)); response.getWriter().flush(); response.getWriter().close(); return false; } return true; } }
permission就是注解中的id传,然后取request中session中的sid串做对比就行了(本人没用session用的redis)
checkUser部分代码
@Override public void checkUser(HttpServletRequest request, String[] permissions) { String token = request.getParameter("token"); if (StringUtils.isEmpty(token) || RedisUtil.get(token, "addId") == null) { throw new SifudeException(SifudeExceptionEnum.USER_UNLOG_EXCEPTION); } String sids = RedisUtil.get(token, "sids") + ""; if (permissions != null) { boolean flag = false; for (String permission : permissions) { if (sids.contains(permission)) { flag = true; break; } } if (!flag) { throw new SifudeException(SifudeExceptionEnum.USER_PERMISSON_ILLEGAL_EXCEPTION); } } }
这样就完成了,最后是spring中对过滤器的配置
<mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/comp/**" /> <bean class="com.sifude.youlife.filter.MainFilter" /> </mvc:interceptor> </mvc:interceptors>
恩恩,就是这样,有什么不明白的地方欢迎留言讨论
时间: 2024-10-18 10:46:46