在 java 应用程序中使用 apache shiro 为 Rest 服务方法提供授权

Posted

技术标签:

【中文标题】在 java 应用程序中使用 apache shiro 为 Rest 服务方法提供授权【英文标题】:Provide authorisation using apache shiro for Rest service method in java application 【发布时间】:2017-04-16 21:29:55 【问题描述】:

在我的简单 Web 应用程序中,我有两种 Web 服务方法。一个是storeName(),另一个是viewAllNames() 方法。

管理员角色可以访问这两种方法。但用户角色应该是访问 viewAllNames() 方法。

我将使用 Apache shiro,maven 以及基于 Web 的项目和休息服务。仅为这两种方法提供授权。

我的实际休息网址是:

http://localhost:8080/SimpleRest/simpleservice/store/jackreobert  --> admin only
http://localhost:8080/SimpleRest/simpleservice/viewall/           --> user only

如何配置shiro.ini、web.xml和annotaion/xml。

对于 shiro 方法,我是否需要将任何其他信息传递到 Web 服务 url,如何实现这一点。

SimpleService.java

package com.simple.rest;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Response;
import org.apache.shiro.authz.annotation.RequiresRoles;
import org.json.JSONException;

@Path("/simpleservice")
public class SimpleService 
   @Path("/store/name")
@GET
@Produces("application/json")
public Response storeName(@PathParam("name") String name) throws JSONException  
/**
 * Here insert logic 
 */
String result = "Given name: " + name + " successfully stored";
return Response.status(200).entity(result).build();

@Path("/viewall")
@GET
@Produces("application/json")
public Response viewAllNames() throws JSONException  
   /**
 * Here retrieve logic 
 */
String result = "All names are taken";
return Response.status(200).entity(result).build();

感谢您阅读我的帖子。 帮我, 提前致谢。

【问题讨论】:

【参考方案1】:

我的建议是使用权限。使用权限保护您的应用程序资源。为角色分配权限并将角色分配给用户。

从 Shiro 1.4.0-RC2 开始,有官方的 JAX-RS 支持,看看sample。

【讨论】:

以上是关于在 java 应用程序中使用 apache shiro 为 Rest 服务方法提供授权的主要内容,如果未能解决你的问题,请参考以下文章

[shyのJAVA初探]hdu1166●树状数组

JAVA常用知识点(mian shi ti)积累

JAVA常用知识(mian shi)点总结---集合

Java学习笔记6(循环和数组练习题)

简单易用的Apache shiro框架,以及复杂完整的springboot security安全框架

java Javaのenumについてref:http://qiita.com/k4h4shi/items/82340ec696db6034949e