springMvc+shiro跳过登陆

2020-06-16 科技 145阅读
springmvc集成shiro登录失败处理
一般的登录流程会有:用户名不存在,密码错误,验证码错误等..
在集成shiro后,应用程序的外部访问权限以及访问控制交给了shiro来管理。
shiro提供了两个主要功能:认证(Authentication)和授权(Authorization);认证的作用是证明自身可以访问,一般是用户名加密码,授权的作用是谁可以访问哪些资源,通过开发者自己的用户角色权限系统来控制。
shiro的会话管理和缓存管理不在本文范围内。
下面通过登录失败的处理流程来介绍springmvc与shiro的集成。
项目依赖:
在web.xml里配置shiro

shiroFilter</filter-name>
org.springframework.web.filter.DelegatingFilterProxy</filter-class>

targetFilterLifecycle</param-name>
true</param-value>
</init-param>
</filter>

shiroFilter</filter-name>
/*</url-pattern>
</filter-mapping>
新建一个spring-context-shiro.xml配置shiro相关信息,使用spring加载

xmlns:xsi="/2001/XMLSchema-instance" xmlns:context="schema/context"
xsi:schemaLocation="
schema/beans schema/beans/spring-beans-3.2.xsd
schema/context schema/context/spring-context-3.2.xsd"
default-lazy-init="true">
Shiro Configuration</description>









</map>
</property>


/sys/login = authc
/sys/logout = logout
/sys/** = user
</value>
</property>
</bean>




</bean>







</bean>





</bean>





</bean>



</bean>





</bean>


</bean>
</beans>
新建一个登录认证过滤器FormAuthenticationFilter.java
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.web.util.WebUtils;
import org.springframework.stereotype.Service;
/**
* 表单验证(包含验证码)过滤类*/
@Service
public class FormAuthenticationFilter extends org.apache.shiro.web.filter.authc.FormAuthenticationFilter {
public static final String DEFAULT_CAPTCHA_PARAM = "validateCode";
private String captchaParam = DEFAULT_CAPTCHA_PARAM;
public String getCaptchaParam() {
return captchaParam;
}
protected String getCaptcha(ServletRequest request) {
return WebUtils.getCleanParam(request, getCaptchaParam());
}
protected AuthenticationToken createToken(ServletRequest request, ServletResponse response) {
String username = getUsername(request);
String password = getPassword(request);
String locale = request.getParameter("locale");
if (password == null) {
password = "";
}
boolean rememberMe = isRememberMe(request);
String host = getHost(request);
String captcha = getCaptcha(request);
return new UsernamePasswordToken(username, password.toCharArray(),locale, rememberMe, host, captcha);
}
}
声明:你问我答网所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系fangmu6661024@163.com