1.首先在web.xml里面配置
<!-- Shiro Security filter -->
<filter>
<filter-name>shiroFilter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
<init-param>
<param-name>targetFilterLifecycle</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>shiroFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
2.在shiro的配置文件中配置,红色就是重点配置
<!-- Shiro主过滤器本身功能十分强大,其强大之处就在于它支持任何基于URL路径表达式的、自定义的过滤器的执行 Web应用中,Shiro可控制的Web请求必须经过Shiro主过滤器的拦截,Shiro对基于Spring的Web应用提供了完美的支持 -->
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
<!-- Shiro的核心安全接口,这个属性是必须的 -->
<property name="securityManager" ref="securityManager" />
<!-- 要求登录时的链接(可根据项目的URL进行替换),非必须的属性,默认会自动寻找Web工程根目录下的"/login.html"页面 -->
<!-- <property name="loginUrl" value="http://localhost:8080/renren-security/login.html"
/> -->
<property name="loginUrl" value="login" />
<!-- 登录成功后要跳转的连接 -->
<property name="successUrl" value="/index" />
<property name="unauthorizedUrl" value="/" />
<!-- Shiro连接约束配置,即过滤链的定义
下面value值的第一个'/'代表的路径是相对于HttpServletRequest.getContextPath()的值来的 anon:它对应的过滤器里面是空的,什么都没做,这里.do和.jsp后面的*表示参数,比方说login.jsp?main这种
authc:该过滤器下的页面必须验证后才能访问,它是Shiro内置的一个拦截器org.apache.shiro.web.filter.authc.FormAuthenticationFilter -->
<property name="filters">
<map>
<entry key="login123"value-ref="login" />
</map>
</property>
<property name="filterChainDefinitions">
<value>
/list*=login123 <!--调用上面配置的拦截器-->
/statics/**=anon
<!-- /login=anon -->
/js/**=anon
/logout* = anon
/captcha.jpg=anon
/**=login123,authc <!--调用上面配置的拦截器-->
</value>
<!-- 自定义shiro 的 Filter -->
</property>
3.配置你写的拦截器,我配置的
<!-- 自定义Filter bean -->
<bean id="login" class="com.fca.filter.LoginFilter">
<!-- <property name="jedis" ref="jedis" /> --> <!--注入参数-->
<property name="sessionProvider" ref="sessionProvider" />
</bean>
4.filter的编写 到底继承那个filter 可以去看开涛大神的这篇文章: 第八章 拦截器机制——《跟我学Shiro》 jinnianshilongnian.iteye.com/blog/202565…
public class LoginFilter extends XXFilter {
@Autowired
private SessionProvider sessionProvider;
/*
* @Autowired private Jedis jedis;
*
* public Jedis getJedis() { return jedis; }
*
* public void setJedis(Jedis jedis) { this.jedis = jedis; }
*/
public SessionProvider getSessionProvider() {
return sessionProvider;
}
public void setSessionProvider(SessionProvider sessionProvider) {
this.sessionProvider = sessionProvider;
}
}