shiro修正はログインしていないかsessionが失効し、ajaxに基づいてjsonを返す

36989 ワード

転載先:https://blog.csdn.net/football98/article/details/76660920
shiroフレームワークを使用して権限制御を行うと、ログインまたはsessionが無効になりajaxリクエストを行うと、ログインページがジャンプせず、正しい結果が返されないだけです.
したがってajaxリクエストの特殊な処理を解決する必要がある.
1.再FormAuthenticationFilterクラスonAccessDeniedメソッド.異なる休暇の仕方によって、異なる結果を返させます.
  1. import org.apache.shiro.web.filter.authc.FormAuthenticationFilter;
  2. import javax.servlet.ServletRequest;
  3. import javax.servlet.ServletResponse;
  4. import javax.servlet.http.HttpServletRequest;
  5. import java.io.PrintWriter;
  6. public class ShiroFormAuthenticationFilter extends FormAuthenticationFilter {
  7. @Override
  8. protected boolean onAccessDenied(ServletRequest request, ServletResponse response) throws Exception {
  9. if( this.isLoginRequest(request, response)) {
  10. if( this.isLoginSubmission(request, response)) {
  11. return this.executeLogin(request, response);
  12. } else {
  13. return true;
  14. }
  15. } else {
  16. String header = ((HttpServletRequest) request).getHeader( "Content-Type");
  17. if(header != null && header.equals( "application/x-www-form-urlencoded")){
  18. response.setCharacterEncoding( "UTF-8");
  19. PrintWriter out = response.getWriter();
  20. out.print( "{\"isOver\" : true }");
  21. out.flush();
  22. out.close();
  23. } else{
  24. this.saveRequestAndRedirectToLogin(request, response);
  25. }
  26. return false;
  27. }
  28. }
  29. }
       2、 shiro , 。

  1. <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
  2. <property name="securityManager" ref="securityManager"> property>
  3. <property name="loginUrl" value="/"> property>
  4. <property name="unauthorizedUrl" value="/"> property>
  5. <property name="filters">
  6. <map>
  7. <entry key="authc">
  8. <bean class="zteict.qinhuangdao.framework.common.shiro.shiro.ShiroFormAuthenticationFilter"> bean>
  9. entry>
  10. map>
  11. property>
  12. <property name="filterChainDefinitions">
  13. <value>
  14. /components/** = anon
  15. /css/** = anon
  16. /images/** = anon
  17. /lib/** = anon
  18. /LoginController.js = anon
  19. /loginController/login.do = anon
  20. /** = authc
  21. value>
  22. property>
  23. bean>
        3、 ajax , angularjs, post service, js , 。

  1. /**
  2. * post
  3. * @param url
  4. * @param data
  5. * @param callback
  6. */
  7. var commPost = function (url,data,callback) {
  8. $http({
  9. method: 'POST',
  10. url:baseUrl+url,
  11. data : data
  12. }).then( function(result) {
  13. if(result.data.isOver != undefined && result.data.isOver){
  14. //
  15. window.location.href = baseUrl+ "pages/common/login/login.html";
  16. } else{
  17. callback(result.data);
  18. }
  19. });
  20. };