shiro自定义过滤器不管用

liaoguolingxian 2014-11-24 05:32:22
自己配置了自定义的过滤器,但当访问JSONController/post这个地址时没有反应,求大神指点
只是shiro配置文件的一部分:
<bean id="rolesAnyAuthorizationFilter" class="com.trs.xmtdb.filter.RolesAnyAuthorizationFilter"></bean>


<!-- Shiro Filter -->
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
<property name="securityManager" ref="securityManager" />
<property name="loginUrl" value="/sso/login" />
<property name="successUrl" value="/outline/dbg" />
<property name="filters">
<map>
<entry key="roleAAF" value-ref="rolesAnyAuthorizationFilter"/>
</map>
</property>


<property name="filterChainDefinitions">
<value>

/sso/logout = logout
/sso/login = anon
/idsAgentPages/** = anon
/idsHalt.jsp = anon
/idsAgents/GetLongUrlServlet = anon
/TRSIdSSSOProxyServlet = anon
/static/** = anon
/JSONController/post=roleAAF
/api/** = anon
/register/** = anon
/admin/** = roles[admin]
/** = user
</value>
</property>
</bean>


这是自定义过滤器:

import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;

import org.apache.shiro.subject.Subject;
import org.apache.shiro.web.filter.authz.AuthorizationFilter;

import com.sun.tools.internal.ws.processor.model.Request;

public class RolesAnyAuthorizationFilter extends AuthorizationFilter {

@Override
public boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue) throws IOException {
String url=request.getParameter("url");
String reqUrl = ((HttpServletRequest) request).getRequestURL().toString();
System.out.println("请求地址:"+reqUrl);
System.out.println("参数地址:"+url);


String re = "\\/(.*?)\\/";
Pattern p = Pattern.compile(re);
Matcher m = p.matcher(url);
String server="";
int n=0;
while(m.find()){
server=m.group(1);
if(n==1){
break;
}
n++;
}

Subject subject = getSubject(request, response);
System.out.println("访问服务名:"+server+";用户角色是否存在:"+subject.hasRole(server));
if(subject.hasRole(server)){
return true;
}
// }

// try {
// request.getRequestDispatcher("sso/error").forward(request, response);
// } catch (ServletException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
return false;
}


}
...全文
1157 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
乐创 2015-01-30
  • 打赏
  • 举报
回复
我的问题已经解决了,留个答案给后人。

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="order" value="3"/>
        <property name="prefix" value="/WEB-INF/view/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
这是mvc的的过滤,然后prefix为/WEB-INF/view/,但是我的control里return页面是却是这样的“/xxx/yyy”,这个联合起来就是:http://localhost:8080/WEB-INF/iew//xxx/yyy,这个红色的就是两个斜线,jetty9中就报错,jetty8中没问题。后来统一改了一下control,重新部署后,没问了。
乐创 2015-01-29
  • 打赏
  • 举报
回复
楼主解决了么?我的情况是:jetty8部署没有问题,jetty9部署就出现了shiro不起作用的情况。

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧