r即可。如果非常简单的cookie,可以直接实现RememberMeManager的几个接口方法也行
【Apache Shiro in Spring】自定义filterChainDefinitions和Realm
文章出处
在Spring Context中定义shiroFilter(org.apache.shiro.spring.web.ShiroFilterFactoryBean)时需要为其filterChainDefinitions property赋值,这个属性是个chainName-to-chainDefinition map of chain definitions,用于为URL定义过滤策略。
filterChainDefinitions是一个set method,他调用setFilterChainDefinitionMap(section),FilterChainDefinitionMap是个Field。
比如,这是我定义的:
/404.htm = anon /main!main.html = anon /**.html = perms[myPerm_1]
在这里引用一下某前辈总结的chainDefinition,如下:
rest:比如/admins/user/**=rest[user],根据请求的方法,相当于/admins/user/**=perms[user:method] ,其中method为post,get,delete等。
port:比如/admins/user/**=port[8081],当请求的url的端口不是8081是跳转到schemal://serverName:8081?queryString,其中schmal是协议http或https等,serverName是你访问的host,8081是url配置里port的端口,queryString是你访问的url里的?后面的参数。
perms:比如/admins/user/**=perms[user:add:*],perms参数可以写多个,多个时必须加上引号,并且参数之间用逗号分割,比如/admins/user/**=perms["user:add:*,user:modify:*"],当有多个参数时必须每个参数都通过才通过,想当于isPermitedAll()方法。
roles:比如/admins/user/**=roles[admin],参数可以写多个,多个时必须加上引号,并且参数之间用逗号分割,当有多个参数时,比如/admins/user/**=roles["admin,guest"],每个参数通过才算通过,相当于hasAllRoles()方法。
anon:比如/admins/**=anon 没有参数,表示可以匿名使用。
authc:比如/admins/user/**=authc表示需要认证才能使用,没有参数
authcBasic:比如/admins/user/**=authcBasic没有参数表示httpBasic认证
ssl:比如/admins/user/**=ssl没有参数,表示安全的url请求,协议为https
user:比如/admins/user/**=user没有参数表示必须存在用户,当登入操作时不做检查
一般情况下,我们可以将模块作为一个授权单位,例如:
/blog!**.html = user
偶尔也会有将每一个URL作为一个授权单位进行控制,例如:
/blog!doAddNewArticle.html = authc,perms[addArticle]
但是URL的数量让人头疼,也许可以每开发一个功能的时候打开XML文件写入URL然后同步到SVN,或者我们也可以找一个人专门做这些事情,无论是添加、删除功能还是修改方法名都通知这个人去做...换位思考一下,我不希望我是这个人...
所以我要把这些URL放在数据库进行管理。我要把他们统统Query出来放到filterChainDefinitions里。
我需要装配一个Bean,实际上他是一个org.springframework.beans.factory.FactoryBean<Section>的实现。
<bean id="chainFilterBuff" class="king.common.ChainFilterBuff">
<property name="filterChainDefinitions">
/404.htm = anon
/main!main.html = anon
</property>
</bean>
然后将其注入:
<bean id="shiroFilter1" class="org.apache