@configuration
public class webexceptionhandlerconfig
}
在.yml 配置檔案設定上傳檔案 抵達的資料夾路徑
bootdo:
uploadpath: f:/downdload/
先定義上傳路徑的類
@component
@configurationproperties(prefix="bootdo")
public class bootdoconfig
public void setuploadpath(string uploadpath)
}
在config目錄下 新建用於對映類 (繼承webmvcconfigureradapter)
@component
class webconfigurer extends webmvcconfigureradapter
}
public class md5util catch (nosuchalgorithmexception e) catch (unsupportedencodingexception e)
return result;
} //手動驗證
public static void main(string args) throws nosuchalgorithmexception, unsupportedencodingexception
}
獲取當前環境下登陸的使用者物件 此類放進utils包裡
在userrealm包新建myuserrealm類繼承 authorizingrealm 會繼承2個方法
public class myuserrealm extends authorizingrealm
/*** 告訴shiro哪個subject有哪些訪問許可權
*/protected authorizationinfo dogetauthorizationinfo(principalcollection principals)
} system.out.println("使用者: "+user.getusername()+" 的許可權有:"+permissions);
******authorizationinfo authorinfo = new ******authorizationinfo();
authorinfo.setstringpermissions(permissions);
return authorinfo; }
/*** 實際的登陸驗證
*/protected authenticationinfo dogetauthenticationinfo(authenticationtoken token) throws authenticationexception
//啟用md5方式判斷
if(md5util.validatepwd(password, user.getpassword(),username))else
}}
@configuration
public class shiroconfig
@bean
public securitymanager securitymanager(myuserrealm myuserrealm)
@bean
public myuserrealm muserrealm(sysuserservice userservice)
/*** 讓shiro參與到spring的bean的管理中來
* @return
*/@bean
public lifecyclebeanpostprocessor lifecyclebeanpostprocessor()
/*** 掃瞄所有的bean尋找通知並將通知器所切入bean中
* @return
*/@bean
public defaultadvisorautoproxycreator advisorautoproxycreator()
@bean
public authorizationattributesourceadvisor attributesourceadvisor(securitymanager securitymanager)
}
登陸的控制器
} 登陸的頁面
使用者名稱:
密碼:
/**
* 按照也沒元件的特點生成所有對應使用者選單的集合
*/@autowired
private sysuserdao sysuserdao;
@autowired
private sysmenudao menudao;
@autowired
private sysrolemenudao rolemenudao;
@autowired
private sysuserroledao userroledao;
@override
public linkedhashmap> listallmenusbyuserid(long userid)
}} allmenus.sort(new comparator()
if (o2 == null)
if (o1.getparentid().intvalue() != o2.getparentid())
if (o2.getparentid() == null)
return (int) (o1.getparentid() - o2.getparentid());
}if (o1.getordernum().intvalue() != o2.getordernum())
if (o2.getordernum() == null)
return o1.getordernum() - o2.getordernum();
} else
}});
// 整理選單到總結構中
linkedhashmap> allmenuinorder = new linkedhashmap<>();
mapallparents = new hashmap<>();
for (sysmenudo m : allmenus)
if (m.getparentid() == null || m.getparentid() == 0) else
list.add(m);
}} return allmenuinorder;
}
JS框架的一些小總結
為了防止和別的庫的衝突,用閉包把整個框架安全地保護好。我們待會的 都寫在裡面。這裡建立乙個全域性變數 window.o 就是在window物件裡加個o,它等價於 oct 相當於jquery jquery這樣的別稱,意味著以後用oct 或o 來進行操作。把window.o寫成window.那就和jq的...
關於achartengine的使用一些小經驗
最近專案上要使用圖表,便開始在網上找各種圖表架包,好看的都是收費的,最後還是決定用google的achartengine.achartengine使用起來還算好,就是修改樣式很煩.下面就分享下開發經驗吧.所有的chart都分兩塊,一塊是renderer 如xymultipleseriesrender...
React Redux使用的一些小優化
之前畫了一張redux的流程圖,可以看看右下角的部分,可以看出來怎麼進行優化。也就是能不改變就不改變。比如不要做下面這種無謂的事情 function reducer state,action 這個 雖然在selector中,也可以通過arestatepropsequal來判斷計算後的state是否發...