1. shiro 可以有多個過濾器嗎
可以的呢。中間用「,」分割即可,從前到後,依次執行!
推薦一套完整的Shiro Demo,免回費的。
Shiro介紹答文檔:http://www.sojson.com/shiro
Demo已經部署到線上,地址是http://shiro.itboy.net
管理員帳號:admin,密碼:sojson.com 如果密碼錯誤,請用sojson。PS:你可以注冊自己的帳號,然後用管理員賦許可權給你自己的帳號,但是,每20分鍾會把數據初始化一次。建議自己下載源碼,讓Demo跑起來,然後跑的更快。
2. shiro過濾器/* = authc把自己寫的都攔截了,走了上面的攔截器後還是會被/*攔截
我也碰到這種情來況了,,自,發現filters.put("authc", filter_Authc());這種方式注入filter的時候,攔截順序會失效,,,要改成new xx()這種方式才可以filters.put("authc", new Filter_Authc());
3. org.apache.shiro.web.filter.authc.formauthenticationfilter 這個什麼jar包
一般為所抄有的請求啟用或禁用一個過濾器是通過設置其enabled 屬性為true 或false。默認的設置是true, 因為 如果他們被配置在一個過濾器鏈中則本質上是需要執行的。禁用過濾器的例子如下:
[main]
# configure Shiro's default 'ssl' filter to be disabled while testing:
ssl.enabled = false
[urls]
/some/path = ssl, authc
/another/path = ssl, roles[admin]
4. shiro 攔截器formauthenticationfilter這個過濾器什麼情況有作用
springmvc的攔截器是優先順序高於shiro的,shiro就是自定義實現了spring mvc的filter吧,如果足夠牛逼的話是可以不用shiro的,完全可以自己實現安全攔截的
5. 怎麼樣每次請求都走shiro過濾器鏈
Shiro的過濾器的配抄置是結合使用Spring的DelegatingFilterProxy與FactoryBean2種技術來完成自身過濾器的植入的,所以理解Shiro的過濾器首先要理解這2者的使用。
DelegatingFilterProxy :
Spring提供的一個簡便的過濾器的處理方案,它將具體的操作交給內部的Filter對象delegate去處理,而這個delegate對象通過Spring IOC容器獲取,這里採用的是Spring的FactoryBean的方式獲取這個對象。
ShiroFilterFactoryBean:
配置如下 :
[html] view plainprint?
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
</bean>
由於它是個FactroyBean,所以上面的delegate真正的對象是通過它的getObject()獲取的。
6. shiro默認不配置任何過濾許可權時不會自動調用授權函數
printPreviewDialog1.PrintPreviewControl.StartPage = 0;
class Composite : Component
{
private List children = new List();
public Composite(string name) : base(name) { }
public override void Add(Component c)
{
children.Add(c);
}
public override void Remove(Component c)
{
children.Remove(c);
}
7. apache shiro是個什麼
Apache
Shiro
是ASF旗下的一款開源軟體(Shiro發音為「shee-roh」,日語「堡壘(Castle)」的意思),提供了一個強大而靈活的安全框架。可為任何應用提供安全保障—
從命令行應用、移動應用到大型網路及企業應用。
8. shiro authc 什麼意思
是Apache shiro 的認證配置的過濾器之一:
authc 指定需要認證的uri
anon 指定排除認證的uri
(題主提問的有點隨意, authc不是單詞, 寫JAVA程序的一看就知道是shiro的, 否則不知道你說什麼)
9. 怎麼自定義shiro中的過濾器來允許ajax請求後台數據
自定義過濾器:
public class extends FormAuthenticationFilter {
@Override
protected boolean onAccessDenied(ServletRequest request, ServletResponse response) throws Exception {
if (isLoginRequest(request, response)) {
if (isLoginSubmission(request, response)) {
return executeLogin(request, response);
} else {
// 放行 allow them to see the login page ;)
return true;
}
} else {
HttpServletRequest httpRequest = WebUtils.toHttp(request);
if (ShiroFilterUtils.isAjax(httpRequest)) {
HttpServletResponse httpServletResponse = WebUtils.toHttp(response);
httpServletResponse.sendError(ShiroFilterUtils.HTTP_STATUS_SESSION_EXPIRE);
return false;
} else {
saveRequestAndRedirectToLogin(request, response);
}
return false;
}
}
/**
* 判斷ajax請求
* @param request
* @return
*/
boolean isAjax(HttpServletRequest request){
return (request.getHeader("X-Requested-With") != null && "XMLHttpRequest".equals( request.getHeader("X-Requested-With").toString()) ) ;
}
}
封裝ajax
var Error = function () {
return {
// 初始化各個函數及對象
init: function () {
},
// 顯示或者記錄錯誤
displayError: function(response, ajaxOptions, thrownError) {
if (response.status == 404) {// 頁面沒有找到
pageContent.load($("#hdnContextPath").val() + "/page/404.action");
} else if (response.status == 401) {// session過期
SweetAlert.errorSessionExpire();
} else if (response.status == 507) {// 用戶訪問次數太頻繁
SweetAlert.error("您的訪問次數太頻繁, 請過一會再試...");
} else {//其他錯誤
window.location = $("#hdnContextPath").val() + "/page/500.action";
}
console.log(thrownError);
}
};
}();
jQuery(document).ready(function() {
Error.init();
});
JS的引用處如下:
App.blockUI();
$.ajax({
url: $("#hdnContextPath").val() + "/feedback/queryFeedBackDetail.action",
type: "POST",
async: false,
data: {"feedbackId": feedbackId, "userId": userId, "status": status},
success: function(data) {
// 忽略
10. shiro中的anon,authc啥意思
anon:無需認證即可訪問。
authc:需要認證才可訪問。
user:點擊「記住我」功能可訪問。
try{
subject.login(token);
//獲取realmSecurityManager對象,其包含了很多信息,比如配置文件裡面的數據
=(RealmSecurityManager)securityManager;
Collection<Realm>collection=realmSecurityManager.getRealms();if(collection!=null&&collection.size()>0){
Iteratoriterator=collection.iterator();
while(iterator.hasNext()){
Realmrealm=(Realm)iterator.next();
//得到默認的數據源名稱,雖然默認的為iniRealm,也可以通過程序獲得
StringrealmName=realm.getName();
(10)apacheshiro內置過濾器擴展閱讀:
作用:
封裝了數據源的連接細節,並在需要時將相關數據提供給Shiro。當配置Shiro時,你必須至少指定一個Realm,用於認證和(或)授權。配置多個Realm是可以的,但是至少需要一個。
Shiro內置了可以連接大量安全數據源(又名目錄)的Realm,如LDAP、關系資料庫(JDBC)、類似INI的文本配置資源以及屬性文件等。如果預設的Realm不能滿足需求,你還可以插入代表自定義數據源的自己的Realm實現。