shiro表单登录认证及退出(自定义form认证器)
2016-06-03 11:20
561 查看
博主地址:http://blog.csdn.net/zcl_love_wx
注意:此文是基于springMVC框架的,所以关于springMVC的配置这里不说,后面有时间专门写一个shiro整合spring的文章
由上面代码可看出,我们可以通过usernameParam等参数配置表单认证时form表单里的input框的名字,即常说的字段。默认时为username、password、rememberMe。
自定义form认证器的代码:
其余参见:http://blog.csdn.net/zcl_love_wx/article/details/51577058
注意:此文是基于springMVC框架的,所以关于springMVC的配置这里不说,后面有时间专门写一个shiro整合spring的文章
1.自定义form认证器
自定义的form表单认证器需要继承FormAuthenticationFilter类,我们先看看该类里面有哪些变量public static final String DEFAULT_ERROR_KEY_ATTRIBUTE_NAME = "shiroLoginFailure"; public static final String DEFAULT_USERNAME_PARAM = "username"; public static final String DEFAULT_PASSWORD_PARAM = "password"; public static final String DEFAULT_REMEMBER_ME_PARAM = "rememberMe"; private static final Logger log = LoggerFactory.getLogger(FormAuthenticationFilter.class); private String usernameParam = DEFAULT_USERNAME_PARAM; private String passwordParam = DEFAULT_PASSWORD_PARAM; private String rememberMeParam = DEFAULT_REMEMBER_ME_PARAM; private String failureKeyAttribute = DEFAULT_ERROR_KEY_ATTRIBUTE_NAME;
由上面代码可看出,我们可以通过usernameParam等参数配置表单认证时form表单里的input框的名字,即常说的字段。默认时为username、password、rememberMe。
自定义form认证器的代码:
public class MyFormAuthenticationFilter extends FormAuthenticationFilter{ /** * 校验验证码 * * 原FormAuthenticationFilter的认证方法 * 该方法会在realm前调用 * 由于验证码是我们自己生成存在session里的,所以我们需要在登录时判断验证码是否成功就可用该方法 * * 验证码为空或验证成功 继续执行父类的onAccessDenied方法 * 验证码不为空且验证失败,返回true则不再走realm,直接进控制器的login.do */ @Override protected boolean onAccessDenied(ServletRequest request, ServletResponse response, Object map) throws Exception { // 从session获取正确的验证码 HttpSession session = ((HttpServletRequest)request).getSession(); //页面输入的验证码 String randomcode = request.getParameter("rememberMe"); //从session中取出验证码 //String validateCode = (String) session.getAttribute("validateCode"); String validateCode = "123456"; if (randomcode != null && validateCode != null) { if (!randomcode.equals(validateCode)) { //如果校验失败,将验证码错误失败信息,通过shiroLoginFailure设置到request中 request.setAttribute("shiroLoginFailure", "randomCodeError"); //拒绝访问,不再校验账号和密码 return true; } } return super.onAccessDenied(request, response, map); } }
2. 在shiro配置文件里添加代码
添加滤器里<!-- 注入自定义认证过滤哭喊 --> <bean id="myFormAuthenticationFilter" class="com.mvc.filter.MyFormAuthenticationFilter"> <!-- 配置表单中账号的input名称 --> <property name="usernameParam" value="username"/> <!-- 配置表单中密码的input名称 --> <property name="passwordParam" value="password"/> </bean> <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean"> <property name="securityManager" ref="securityManager"/> <property name="loginUrl" value="/login.do"/> <property name="unauthorizedUrl" value="/refuse.jsp"/> <property name="filters"> <map> <!-- 自定义表单认证的过虑器 --> <entry key="authc" value-ref="myFormAuthenticationFilter"/> <!-- 这里可以添加多个重定义的过滤器 --> </map> </property> <!-- 过虑器链定义,从上向下顺序执行,一般将/**放在最下边 --> <property name="filterChainDefinitions"> <value> /login.do = authc /logout.do = logout /refuse.jsp = anon /** = authc </value> </property> </bean> <!-- 注入自定义realm --> <bean id="myShiroRealm" class="com.mvc.realm.MyShiroRealm"> </bean> <!-- 安全管理器 --> <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager"> <property name="realm" ref="myShiroRealm"></property> </bean>
其余参见:http://blog.csdn.net/zcl_love_wx/article/details/51577058
相关文章推荐
- 一个jar包里的网站
- 一个jar包里的网站之文件上传
- 一个jar包里的网站之返回对媒体类型
- Spring和ThreadLocal
- Spring Boot 开发微服务
- Spring AOP动态代理-切面
- Spring整合Quartz(JobDetailBean方式)
- Spring整合Quartz(JobDetailBean方式)
- 模拟Spring的简单实现
- Spring整合WebSocket应用示例(上)
- spring+html5实现安全传输随机数字密码键盘
- Spring中属性注入详解
- springmvc 发送ajax出现中文乱码的解决方法汇总
- SpringMVC框架下JQuery传递并解析Json格式的数据是如何实现的
- 详解Java的MyBatis框架和Spring框架的整合运用
- struts2 spring整合fieldError问题
- Apache Shiro 使用手册(一) Shiro架构介绍
- spring的jdbctemplate的crud的基类dao
- 读取spring配置文件的方法(spring读取资源文件)