`
y806839048
  • 浏览: 1126459 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

shiro控制返回的三种形式

阅读更多

 

返回状态码,json格式适用于前后分离时,前段清一色的ajax,他们判断你登录成功,或者没有权限等,不能解析你的返回url页面,这时你重写在用url跳转的时候判断是ajax请求就返回状态码给前台,不做跳转

 

 response中的内容只要mvc返回了就自动会返回页面,在相应的结构可以看到,+return null;或者return;

用response.getWriter().print("未找到图片");/////////////打印普通字符或者response.getOutputStream().write(bytes,0,length);///打印流=@ResponseBody  最好加return null;

这是自动当着页面返回请求页(下载之类)

 

shiro控制返回的三种形式:

 

整个思路:url配置了不一样用,判断是ajax就返回状态码,普通请求就用url跳转

 

1,跳转:

 

自己写跳转:

@Override

protected boolean onLoginFailure(org.apache.shiro.authc.AuthenticationToken token, AuthenticationException e, ServletRequest request, ServletResponse response) {

 

RequestDispatcher rd=null;

try{

//this.saveRequestAndRedirectToLogin(request, response);

request.setAttribute("msg", "用户名或密码不正确");

rd = request.getRequestDispatcher("/login");

this.setFailureAttribute(request, e);

rd.forward(request, response);

}catch (Exception e1){

//rd.forward();

}

 

return true;

}

 

 

用框架的跳转:

  protected boolean onLoginSuccess(AuthenticationToken token, Subject subject, ServletRequest request, ServletResponse response) throws Exception {

        this.issueSuccessRedirect(request, response);

        return false;

    }

 

 

 

 

2,返回json和状态码:

@Override

protected boolean onAccessDenied(ServletRequest servletRequest, ServletResponse servletResponse) throws Exception {

HttpServletRequest request = (HttpServletRequest) servletRequest;

HttpServletResponse response = (HttpServletResponse) servletResponse;

String requestType = request.getHeader("X-Requested-With");

String contentType = request.getHeader("content-type");

request.getHeaderNames();

if ((requestType != null && requestType.equalsIgnoreCase("XMLHttpRequest"))||(contentType!=null && contentType.equalsIgnoreCase("application/json; charset=utf-8"))) {

 

response.addHeader("loginStatus", "accessDenied");

response.sendError(HttpServletResponse.SC_FORBIDDEN);

response.setCharacterEncoding("UTF-8");

response.setContentType("application/json");

return false;//状态码

}

 

String method = request.getMethod();

if("GET".equalsIgnoreCase(method)){//跳转

WebUtils.issueRedirect(request, response, "/");

return false;

}

return super.onAccessDenied(request, response);

}

 

 

 

 

我们shiro配置的successurl是在onLoginSuccess用

 

 

 

   protected boolean onLoginSuccess(AuthenticationToken token, Subject subject, ServletRequest request, ServletResponse response) throws Exception {

        this.issueSuccessRedirect(request, response);

        return false;

    }

 

 protected void issueSuccessRedirect(ServletRequest request, ServletResponse response) throws Exception {

        WebUtils.redirectToSavedRequest(request, response, this.getSuccessUrl());

    }

 

 

 

 

 

自定义的onLoginSuccess也可以像上面一样判断如果是ajax返回状态码(下面的代码没加)

@Override

protected boolean onLoginSuccess(org.apache.shiro.authc.AuthenticationToken token, Subject subject, ServletRequest servletRequest, ServletResponse servletResponse) throws Exception {

Session session = subject.getSession();

Map<Object, Object> attributes = new HashMap<Object, Object>();

Collection<Object> keys = session.getAttributeKeys();

for (Object key : keys) {

attributes.put(key, session.getAttribute(key));

}

//session.stop();

session = subject.getSession();

for (Entry<Object, Object> entry : attributes.entrySet()) {

session.setAttribute(entry.getKey(), entry.getValue());

}

setLoginSession(servletRequest, servletResponse);

 

return super.onLoginSuccess(token, subject, servletRequest, servletResponse);

}

 

 

分享到:
评论

相关推荐

    基于Shiro 拦截URL,实现权限控制

    首先,我们需要理解Shiro的三个核心概念: 1. 身份验证(Authentication):确认用户身份的过程,即用户是谁。 2. 授权(Authorization):确定用户是否有权限执行特定操作,即用户能做什么。 3. 会话管理(Session...

    Spring整合Shiro做权限控制模块详细案例分析

    Spring 整合 Apache Shiro 是一个常见的权限控制解决方案,它可以帮助开发者轻松地实现用户登录、权限验证、会话管理等功能。在这个案例中,我们将深入探讨如何将 Shiro 与 Spring 结合使用,构建一个完整的权限控制...

    Shiro集成OAuth2

    Apache Shiro是一个强大的Java安全框架,它提供了身份验证、授权、会话管理和加密等功能,而OAuth2则是一种开放标准,用于授权第三方应用访问用户资源。将Shiro与OAuth2集成,可以实现更灵活的安全控制,特别是在...

    Apache shiro权限控制基础配置代码

    在本文中,我们将深入探讨Apache Shiro的基础配置和代码实现,以帮助你理解如何有效地使用Shiro进行权限控制。 **1. Shiro架构组件** Shiro的核心组件包括:Subject、Realms、Caches、Session Manager、...

    自定义shiro实现识别ajax请求的拒绝返回json,还是普通返回页面

    在 Web 开发中,Shiro 可以帮助我们处理用户的登录、权限控制以及安全相关的逻辑。本篇文章将深入探讨如何使用 Shiro 自定义实现识别 AJAX 请求,并根据请求类型返回 JSON 或普通页面。 首先,我们需要理解 Shiro ...

    shiro实现授权登陆验证

    在这个项目中,我们将会深入理解如何利用Shiro来实现登录验证和权限控制。 首先,我们要理解Shiro的核心组件。`Subject`是Shiro的中心概念,它代表了当前的用户或“安全主体”。`Realms`是Shiro与应用数据源交互的...

    SpringBoot集成Shiro、Jwt和Redis

    **Jwt** 是一种开放标准(RFC 7519),定义了一种紧凑的、自包含的方式来安全地在各方之间传输信息作为一个 JSON 对象。这个信息可以被验证和信任,因为它是数字签名的。在SpringBoot中结合Shiro使用Jwt,可以在用户...

    shiro 权限与角色

    你需要实现`AuthorizingRealm`,覆盖`doGetAuthorizationInfo()`方法,从数据源获取用户的角色和权限信息,并返回给Shiro进行权限验证。 **六、Web集成** 在Web环境中,Shiro可以通过Filter链进行拦截和处理请求。...

    springmvc+shiro 框架搭建

    例如,Shiro可以通过配置或编程方式实现基于角色的访问控制(RBAC),允许你定义用户、角色和权限之间的关系。此外,Shiro的RememberMe服务可以方便地实现用户下次自动登录,而Session管理则支持分布式环境下的会话...

    ssm对shiro框架的整合

    Apache Shiro框架提供了一种直观、简洁的方式来处理应用程序的安全性,允许开发者更专注于业务逻辑而不是安全细节。它包含了身份验证(Authentication)、授权(Authorization)、加密(Cryptography)和会话管理...

    SpringBoot + Shiro实现前后端全分离接口安全框架

    可以配置Shiro不使用默认的session管理,而是采用无状态的方式。 7. **异常处理**:Shiro的拦截器会抛出异常,例如`UnauthorizedException`或`AuthenticationException`,应用需要捕获这些异常并返回合适的HTTP状态...

    springboot-shiro-role-demo.zip

    SpringBoot集成Shiro进行角色控制是企业级应用中常见的安全框架组合。Shiro是一个轻量级的安全框架,它提供身份认证、授权(角色控制)、会话管理和加密等核心功能,适用于Web应用程序和独立的Java应用。SpringBoot...

    shiro+maven+sringMVC+mybatis

    在本实例中,MyBatis用于处理数据库交互,通过XML或注解方式定义SQL语句,与Shiro和SpringMVC配合,实现数据的CRUD操作。 在实际应用中,这个组合的使用流程大致如下: 1. 用户通过浏览器发送请求到SpringMVC。 2. ...

    shiro获取登录状态和用户信息

    Shiro 提供了多种方式来获取当前用户的登录状态,其中一种常用的方式是通过Session来获取。 ##### 2.1 检查登录状态代码示例 ```java public boolean isAuthenticated(String sessionID, HttpServletRequest ...

    Shiro权限控制-区分Ajax请求

    这两种交互方式在用户体验上有所不同,因此在进行权限控制时也需要区别对待。 - **跳转到页面**:这种情况下,如果用户尝试访问无权限的资源,通常的做法是将其重定向至提示没有权限的页面。 - **返回Json数据**:...

    Maven+SSM+Shiro

    Shiro能轻松集成到现有的Java应用中,提供简单的API进行用户身份验证(登录)、权限控制(访问控制)和会话管理。例如,通过Subject接口进行用户操作,通过SecurityManager管理Subject,通过 Realm 连接应用程序的...

    Shiro教程-孙开涛

    - **授权方式**:Shiro支持多种授权方式,包括基于角色的访问控制(RBAC)、基于权限的访问控制(PBAC)等。 - **权限**:Shiro中的权限是指用户能够执行的特定操作,如“读取”、“写入”等。 - **授权流程**: - **...

    shiro视频教程

    #### 三、Shiro 的工作流程 1. **认证流程**: - 用户通过 Subject 提交登录信息。 - Subject 将登录信息提交给 SecurityManager。 - SecurityManager 调用 Realm 获取用户信息并进行认证。 - 认证成功后,...

    shiro-jwt-oauth权限认证

    2. **基于Shiro-JWT-OAuth的认证方式**:这是更复杂的一种认证策略,结合了Shiro的权限管理功能和JWT以及OAuth2.0的授权流程。用户首先通过OAuth2.0流程获取访问令牌,然后使用该令牌获取JWT。Shiro负责处理JWT的...

Global site tag (gtag.js) - Google Analytics