返回状态码,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的三个核心概念: 1. 身份验证(Authentication):确认用户身份的过程,即用户是谁。 2. 授权(Authorization):确定用户是否有权限执行特定操作,即用户能做什么。 3. 会话管理(Session...
Spring 整合 Apache Shiro 是一个常见的权限控制解决方案,它可以帮助开发者轻松地实现用户登录、权限验证、会话管理等功能。在这个案例中,我们将深入探讨如何将 Shiro 与 Spring 结合使用,构建一个完整的权限控制...
Apache Shiro是一个强大的Java安全框架,它提供了身份验证、授权、会话管理和加密等功能,而OAuth2则是一种开放标准,用于授权第三方应用访问用户资源。将Shiro与OAuth2集成,可以实现更灵活的安全控制,特别是在...
在本文中,我们将深入探讨Apache Shiro的基础配置和代码实现,以帮助你理解如何有效地使用Shiro进行权限控制。 **1. Shiro架构组件** Shiro的核心组件包括:Subject、Realms、Caches、Session Manager、...
在 Web 开发中,Shiro 可以帮助我们处理用户的登录、权限控制以及安全相关的逻辑。本篇文章将深入探讨如何使用 Shiro 自定义实现识别 AJAX 请求,并根据请求类型返回 JSON 或普通页面。 首先,我们需要理解 Shiro ...
在这个项目中,我们将会深入理解如何利用Shiro来实现登录验证和权限控制。 首先,我们要理解Shiro的核心组件。`Subject`是Shiro的中心概念,它代表了当前的用户或“安全主体”。`Realms`是Shiro与应用数据源交互的...
**Jwt** 是一种开放标准(RFC 7519),定义了一种紧凑的、自包含的方式来安全地在各方之间传输信息作为一个 JSON 对象。这个信息可以被验证和信任,因为它是数字签名的。在SpringBoot中结合Shiro使用Jwt,可以在用户...
你需要实现`AuthorizingRealm`,覆盖`doGetAuthorizationInfo()`方法,从数据源获取用户的角色和权限信息,并返回给Shiro进行权限验证。 **六、Web集成** 在Web环境中,Shiro可以通过Filter链进行拦截和处理请求。...
例如,Shiro可以通过配置或编程方式实现基于角色的访问控制(RBAC),允许你定义用户、角色和权限之间的关系。此外,Shiro的RememberMe服务可以方便地实现用户下次自动登录,而Session管理则支持分布式环境下的会话...
Apache Shiro框架提供了一种直观、简洁的方式来处理应用程序的安全性,允许开发者更专注于业务逻辑而不是安全细节。它包含了身份验证(Authentication)、授权(Authorization)、加密(Cryptography)和会话管理...
可以配置Shiro不使用默认的session管理,而是采用无状态的方式。 7. **异常处理**:Shiro的拦截器会抛出异常,例如`UnauthorizedException`或`AuthenticationException`,应用需要捕获这些异常并返回合适的HTTP状态...
SpringBoot集成Shiro进行角色控制是企业级应用中常见的安全框架组合。Shiro是一个轻量级的安全框架,它提供身份认证、授权(角色控制)、会话管理和加密等核心功能,适用于Web应用程序和独立的Java应用。SpringBoot...
在本实例中,MyBatis用于处理数据库交互,通过XML或注解方式定义SQL语句,与Shiro和SpringMVC配合,实现数据的CRUD操作。 在实际应用中,这个组合的使用流程大致如下: 1. 用户通过浏览器发送请求到SpringMVC。 2. ...
Shiro 提供了多种方式来获取当前用户的登录状态,其中一种常用的方式是通过Session来获取。 ##### 2.1 检查登录状态代码示例 ```java public boolean isAuthenticated(String sessionID, HttpServletRequest ...
这两种交互方式在用户体验上有所不同,因此在进行权限控制时也需要区别对待。 - **跳转到页面**:这种情况下,如果用户尝试访问无权限的资源,通常的做法是将其重定向至提示没有权限的页面。 - **返回Json数据**:...
Shiro能轻松集成到现有的Java应用中,提供简单的API进行用户身份验证(登录)、权限控制(访问控制)和会话管理。例如,通过Subject接口进行用户操作,通过SecurityManager管理Subject,通过 Realm 连接应用程序的...
- **授权方式**:Shiro支持多种授权方式,包括基于角色的访问控制(RBAC)、基于权限的访问控制(PBAC)等。 - **权限**:Shiro中的权限是指用户能够执行的特定操作,如“读取”、“写入”等。 - **授权流程**: - **...
#### 三、Shiro 的工作流程 1. **认证流程**: - 用户通过 Subject 提交登录信息。 - Subject 将登录信息提交给 SecurityManager。 - SecurityManager 调用 Realm 获取用户信息并进行认证。 - 认证成功后,...
2. **基于Shiro-JWT-OAuth的认证方式**:这是更复杂的一种认证策略,结合了Shiro的权限管理功能和JWT以及OAuth2.0的授权流程。用户首先通过OAuth2.0流程获取访问令牌,然后使用该令牌获取JWT。Shiro负责处理JWT的...