|
@@ -56,64 +56,67 @@ public class LizzMybatisIntercepts implements InnerInterceptor {
|
|
|
Map<String,Object> maps= SecurityUtils.getDataScope(); //获得线程里保存的functionId
|
|
|
if (maps != null) {
|
|
|
SecurityUtils.cleanDataScope(); //当第一次进来后删除线程保存的functionId,避免后续使用的查询sql进来
|
|
|
- String token =maps.get("token").toString();
|
|
|
+ String token = maps.get("token").toString();
|
|
|
//查询数据规则
|
|
|
//设定formdata类型参数
|
|
|
- RequestBody requestBody = new FormBody.Builder()
|
|
|
+ RequestBody requestBody = new FormBody.Builder()
|
|
|
.add("loginId", maps.get("loginId").toString())
|
|
|
- .add("functionId",maps.get("functionId").toString())
|
|
|
+ .add("functionId", maps.get("functionId").toString())
|
|
|
.build();
|
|
|
//建立连接
|
|
|
OkHttpClient okHttpClient = new OkHttpClient();
|
|
|
Request request = new Request.Builder()
|
|
|
- .url(url+"/permission/api/data/queryDataRule")
|
|
|
+ .url(url + "/permission/api/data/queryDataRule")
|
|
|
.post(requestBody)
|
|
|
- .addHeader("Cookie",token)
|
|
|
+ .addHeader("Cookie", token)
|
|
|
.build();
|
|
|
//获得请求返回
|
|
|
String resBody = okHttpClient.newCall(request).execute().body().string();
|
|
|
//处理请求返回
|
|
|
JSONArray jsonArray = JSONArray.parseArray(resBody);
|
|
|
- String sqls ="";
|
|
|
- // 查询字典数据
|
|
|
- //设定formdata类型参数
|
|
|
- RequestBody reBodySource = new FormBody.Builder()
|
|
|
- .add("tableName", "local")
|
|
|
- .build();
|
|
|
- //建立连接
|
|
|
- OkHttpClient okHttpClientSou = new OkHttpClient();
|
|
|
- Request requestSou = new Request.Builder()
|
|
|
- .url(url+"/permission/api/data/getDataSource")
|
|
|
- .post(reBodySource)
|
|
|
- .addHeader("Cookie",token)
|
|
|
- .build();
|
|
|
- //获得请求返回
|
|
|
- String resSource = okHttpClientSou.newCall(requestSou).execute().body().string();
|
|
|
+ if (!(jsonArray.get(0).equals("0") || jsonArray.get(0).equals("-1"))) {
|
|
|
+ String sqls = "";
|
|
|
+ // 查询字典数据
|
|
|
+ //设定formdata类型参数
|
|
|
+ RequestBody reBodySource = new FormBody.Builder()
|
|
|
+ .add("tableName", "local")
|
|
|
+ .build();
|
|
|
+ //建立连接
|
|
|
+ OkHttpClient okHttpClientSou = new OkHttpClient();
|
|
|
+ Request requestSou = new Request.Builder()
|
|
|
+ .url(url + "/permission/api/data/getDataSource")
|
|
|
+ .post(reBodySource)
|
|
|
+ .addHeader("Cookie", token)
|
|
|
+ .build();
|
|
|
+ //获得请求返回
|
|
|
+ String resSource = okHttpClientSou.newCall(requestSou).execute().body().string();
|
|
|
|
|
|
- JSONArray jsonArray1 = JSON.parseArray(resSource);
|
|
|
- // 获得字典
|
|
|
- List<DataSource> dataSources=jsonArray1.toJavaList(DataSource.class);
|
|
|
- //拼接所有角色的限制条件
|
|
|
- if(jsonArray.size()>0){
|
|
|
- PersonnelVO personnelVO =cacheUtils.getLoginUserPersonnel(loginUtils.getId());
|
|
|
- for(int i=0;i<jsonArray.size();i++){
|
|
|
- String sql1= TreeUtils.reSql(JSONObject.parseObject( jsonArray.get(i).toString()) ,dataSources,personnelVO);
|
|
|
- if(!sql1.equals("")){
|
|
|
- sqls += jsonArray.size()!=i+1 ? sql1+" OR ":sql1;}
|
|
|
- }
|
|
|
- // 根据sql语句结构,将拼接sql放入合适的位置
|
|
|
- if(Localsql.contains("order by")){
|
|
|
- Localsql= Localsql.replace("order by","And (" +sqls+") order by");
|
|
|
- }
|
|
|
- else{
|
|
|
- Localsql+=" And (" +sqls+")";
|
|
|
- }
|
|
|
- //将限制条件拼接到sql语句
|
|
|
+ JSONArray jsonArray1 = JSON.parseArray(resSource);
|
|
|
+ // 获得字典
|
|
|
+ List<DataSource> dataSources = jsonArray1.toJavaList(DataSource.class);
|
|
|
+ //拼接所有角色的限制条件
|
|
|
+ if (jsonArray.size() > 0) {
|
|
|
+ PersonnelVO personnelVO = cacheUtils.getLoginUserPersonnel(loginUtils.getId());
|
|
|
+ for (int i = 0; i < jsonArray.size(); i++) {
|
|
|
+ String sql1 = TreeUtils.reSql(JSONObject.parseObject(jsonArray.get(i).toString()), dataSources, personnelVO);
|
|
|
+ if (!sql1.equals("")) {
|
|
|
+ sqls += jsonArray.size() != i + 1 ? sql1 + " OR " : sql1;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 根据sql语句结构,将拼接sql放入合适的位置
|
|
|
+ if (Localsql.contains("order by")) {
|
|
|
+ Localsql = Localsql.replace("order by", "And (" + sqls + ") order by");
|
|
|
+ } else {
|
|
|
+ Localsql += " And (" + sqls + ")";
|
|
|
+ }
|
|
|
+ //将限制条件拼接到sql语句
|
|
|
|
|
|
- Field field = boundSql.getClass().getDeclaredField("sql");//反射获得boundsql的sql属性并改变sql参数
|
|
|
- field.setAccessible(true); //属性设为可见(反射不安全的原因)
|
|
|
- field.set(boundSql, Localsql);
|
|
|
- }}
|
|
|
+ Field field = boundSql.getClass().getDeclaredField("sql");//反射获得boundsql的sql属性并改变sql参数
|
|
|
+ field.setAccessible(true); //属性设为可见(反射不安全的原因)
|
|
|
+ field.set(boundSql, Localsql);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
return true;
|
|
|
}
|
|
|
finally {
|