欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
容易實(shí)現Shiro單點(diǎn)登錄(自定義Token令牌)

1. MVC Controller 映射 sso 方法。

/** * 單點(diǎn)登錄(如已經(jīng)登錄,則直接跳轉) * @param userCode 登錄用戶(hù)編碼 * @param token 登錄令牌,令牌組成:sso密鑰+用戶(hù)名+日期,進(jìn)行md5加密,舉例:  * 		String secretKey = Global.getConfig("shiro.sso.secretKey"); * 		String token = Digests.md5(secretKey + userCode + DateUtils.getDate("yyyyMMdd")); * @param url 登錄成功后跳轉的url地址。 * @param relogin 是否重新登錄,需要重新登錄傳遞true * 例如:http://localhost/project/sso/{token}?url=xxx&relogin=true */@RequestMapping(value = "sso/{userCode}/{token}")public String sso(@PathVariable String userCode, @PathVariable String token, 		@RequestParam(required=true) String url, String relogin, Model model) {	Principal principal = UserUtils.getPrincipal();	// 如果已經(jīng)登錄	if(principal != null){		// 如果設置強制重新登錄,則重新登錄		if (BooleanUtils.toBoolean(relogin)){			UserUtils.getSubject().logout();		}		// 否則,直接跳轉到目標頁(yè)		else{			return "redirect:" + Encodes.urlDecode2(url);		}	}	// 進(jìn)行單點(diǎn)登錄	if (token != null){		UsernamePasswordToken upt = new UsernamePasswordToken();		try {			upt.setUsername(userCode); // 登錄用戶(hù)名			upt.setPassword(token.toCharArray()); // 密碼組成:sso密鑰+用戶(hù)名+日期,進(jìn)行md5加密,舉例: Digests.md5(secretKey+username+20150101))			upt.setParams(upt.toString()); // 單點(diǎn)登錄識別參數,see: AuthorizingRealm.assertCredentialsMatch		} catch (Exception ex){        	if (!ex.getMessage().startsWith("msg:")){        		ex = new AuthenticationException("msg:授權令牌錯誤,請聯(lián)系管理員。");        	}        	model.addAttribute("exception", ex);		}		try {			UserUtils.getSubject().login(upt);			return "redirect:" + Encodes.urlDecode2(url);        } catch (AuthenticationException ae) {        	if (!ae.getMessage().startsWith("msg:")){        		ae = new AuthenticationException("msg:授權錯誤,請檢查用戶(hù)配置,若不能解決,請聯(lián)系管理員。");        	}        	model.addAttribute("exception", ae);        }	}	return "error/403";}

 

2. 重載org.apache.shiro.realm.AuthorizingRealm類(lèi)的assertCredentialsMatch方法

/** * 認證密碼匹配調用方法 */@Overrideprotected void assertCredentialsMatch(AuthenticationToken authcToken,		AuthenticationInfo info) throws AuthenticationException {	UsernamePasswordToken token = (UsernamePasswordToken) authcToken;	// 若單點(diǎn)登錄,則使用單點(diǎn)登錄授權方法。	if (token.toString().equals(token.getParams())){		// sso密鑰+用戶(hù)名+日期,進(jìn)行md5加密,舉例: Digests.md5(secretKey+username+20150101))		String secretKey = Global.getConfig("shiro.sso.secretKey");		String password = Digests.md5(secretKey + token.getUsername() + DateUtils.getDate("yyyyMMdd"));		if (password.equals(String.valueOf(token.getPassword()))){			return;		}	}	super.assertCredentialsMatch(token, info);}

 

3. 實(shí)現Shiro無(wú)狀態(tài)訪(fǎng)問(wèn),如通過(guò)傳遞sessionid參數即可實(shí)現會(huì )話(huà)訪(fǎng)問(wèn)

 這里需要自定義Shiro的SessionManager類(lèi),方法是繼承org.apache.shiro.web.session.mgt.DefaultWebSessionManager類(lèi),重載getSessionId方法,如下:

 

public class SessionManager extends DefaultWebSessionManager {	public SessionManager() {		super();	}		@Override	protected Serializable getSessionId(ServletRequest request, ServletResponse response) {		// 如果參數中包含“__sid”參數,則使用此sid會(huì )話(huà)。 例如:http://localhost/project?__sid=xxx&__cookie=true		// 其實(shí)這里還可以使用如下參數:cookie中的session名稱(chēng):如:JSESSIONID=xxx,路徑中的 ;JESSIONID=xxx,但建議還是使用 __sid參數。		String sid = request.getParameter("__sid");		if (StringUtils.isNotBlank(sid)) {			// 是否將sid保存到cookie,瀏覽器模式下使用此參數。			if (WebUtils.isTrue(request, "__cookie")){		        HttpServletRequest rq = (HttpServletRequest)request;		        HttpServletResponse rs = (HttpServletResponse)response;				Cookie template = getSessionIdCookie();		        Cookie cookie = new SimpleCookie(template);				cookie.setValue(sid); cookie.saveTo(rq, rs);			}			// 設置當前session狀態(tài)            request.setAttribute(ShiroHttpServletRequest.REFERENCED_SESSION_ID_SOURCE,                    ShiroHttpServletRequest.URL_SESSION_ID_SOURCE); // session來(lái)源與url            request.setAttribute(ShiroHttpServletRequest.REFERENCED_SESSION_ID, sid);            request.setAttribute(ShiroHttpServletRequest.REFERENCED_SESSION_ID_IS_VALID, Boolean.TRUE);        	return sid;		}else{			return super.getSessionId(request, response);		}	} }

 

 

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
SSO、單點(diǎn)登錄、集成 CAS、OAuth2
同步器令牌防止用戶(hù)重復提交
Apache Shiro實(shí)現單點(diǎn)登錄SSO | 沐風(fēng)
微服務(wù)網(wǎng)關(guān)鑒權:gateway使用、網(wǎng)關(guān)限流使用、用戶(hù)密碼加密、JWT鑒權
徹底搞定前后端所有鑒權方案,讓你不再迷惘
Springboot下Shiro+Token使用redis做安全認證方案
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久