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实现。