spring mvc整合shiro无法访问控制器是什么问题

游戏攻略05

spring mvc整合shiro无法访问控制器是什么问题,第1张

spring mvc整合shiro无法访问控制器是什么问题
导读:  1概述  现在的项目使用的权限控制系统是spring security 3因为项目的框架使用spring,就顺便使用了。最近研究了一下spring side4,推荐使用shiro。照着示例做了一遍。在原有的spring web工程中。步

  1概述

  现在的项目使用的权限控制系统是spring security 3因为项目的框架使用spring,就顺便使用了。最近研究了一下spring

side4,推荐使用shiro。照着示例做了一遍。在原有的spring web工程中。步骤如下。

  2引进包,maven设置

  [html] view plaincopy

  orgapacheshiro

  shiro-all

  121

  jar

  compile

  3实现Controller层

  主要是登陆url和几个掩饰url

  [java] view plaincopy

  @Controller

  public class AdminController {

  @RequestMapping(value = "/admin/index", method = RequestMethodGET)

  public String index(Model model) {

  return "admin/index";

  }

  @RequestMapping(value = "/admin/login", method = RequestMethodGET)

  public String login(Model model) {

  loggerinfo("login get");

  return "admin/login";

  }

  @RequestMapping(value = "/admin/login", method = RequestMethodPOST)

  public String doLogin(Model model) {

  loggerinfo("login post");

  return "admin/login";

  }

  @RequiresRoles("user")

  @RequestMapping(value = "/admin/user", method = RequestMethodGET)

  public String shiroUser(Model model) {

  return "admin/index";

  }

  @RequiresRoles("admin")

  @RequestMapping(value = "/admin/admin", method = RequestMethodGET)

  public String shiroAdmin(Model model) {

  return "admin/index";

  }

  Logger logger = LoggerFactorygetLogger(AdminControllerclass);

  }

  4实现权限验证

  继承shiro的AuthorizingRealm

  [java] view plaincopy

  public class ShiroDbRealm extends AuthorizingRealm {

  protected AccountService accountService;

  @Autowired

  public void setAccountService(AccountService accountService) {

  thisaccountService = accountService;

  }

  /

   授权查询回调函数, 进行鉴权但缓存中无用户的授权信息时调用

  /

  @SuppressWarnings("unused")

  @Override

  protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection p)

{

  loggerinfo("授权认证:" + pgetRealmNames());

  ShiroUser shiroUser = (ShiroUser) pgetPrimaryPrincipal();

  &nbsnbsp;User user =

accountServicefindUserByLoginName(shiroUserloginName);

  SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();

  for (Role role : usergetRoleList()) {

  //基于Role的权限信息

  infoaddRole(rolegetName());

  //基于Permission的权限信息

  infoaddStringPermission(rolegetPermissions());

  }

  return info;

  }

  /

   认证回调函数,登录时调用

  /

  @Override

  protected AuthenticationInfo doGetAuthenticationInfo(

  AuthenticationToken authcToken) throws AuthenticationException {

  loggerinfo("authc pass:");

  UsernamePasswordToken token = (UsernamePasswordToken) authcToken;

  loggerinfo("authc name:" + tokengetUsername());

  User user = accountServicefindUserByLoginName(tokengetUsername());

  if (user != null) {

  if (usergetStatus()equals("disabled")) {

  throw new DisabledAccountException();

  }

  loggerinfo("authc name:" + tokengetUsername() + " user:"

  + usergetLoginName() + " pwd:" + usergetPassword()

  + "getname:" + getName());

  // byte[] salt = EncodesdecodeHex(usergetSalt());

  return new SimpleAuthenticationInfo(new ShiroUser(usergetLoginName(),

usergetName()),

  usergetPassword(), getName());

  }

  return null;

  }

  /

   自定义Authentication对象,使得Subject除了携带用户的登录名外还可以携带更多信息

  /

  public static class ShiroUser implements Serializable {

  private static final long serialVersionUID = -1373760761780840081L;

  public String loginName;

  public String name;

  public ShiroUser(String loginName, String name) {

  thisloginName = loginName;

  thisname = name;

  }

  public String getName() {

  return loginName;

  }

  /

   本函数输出将作为默认的输出

  /

  @Override

  public String toString() {

  return loginName;

  }

  /

   重载hashCode,只计算loginName;

  /

  @Override

  public int hashCode() {

  return ObjectshashCode(loginName);

  }

  /

   重载equals,只计算loginName;

  /

  @Override

  public boolean equals(Object obj) {

  if (this == obj)

  return true;

  if (obj == null)

  return false;

  if (getClass() != objgetClass())

  return false;

  ShiroUser other = (ShiroUser) obj;

  if (loginName == null) {

  if (otherloginName != null)

  return false;

  } else if (!loginNameequals(otherloginName))

  return false;

  return true;

  }

  }

  Logger logger = LoggerFactorygetLogger(ShiroDbRealmclass);

  }

  自定义的类ShiroUser是为了,可以多传输一些内容,供后面验证时使用,例子中只用了一个loginName,一般可以用String

传输就够了。

  登陆时用doGetAuthenticationInfo()函数获得相关信息。

  登陆后访问url 使用doGetAuthorizationInfo()获得用户的权限。

  5配置文件shiro部分

  将controller的url纳入权限验证范围。

  [html] view plaincopy

  <beans xmlns="http://wwwspringframeworkorg/schema/beans"

xmlns:xsi="http://wwww3org/2001/XMLSchema-instance"

  xsi:schemaLocation="http://wwwspringframeworkorg/schema/beans

http://wwwspringframeworkorg/schema/beans/spring-beans-32xsd"

  default-lazy-init="true">

  Shiro安全配置

  /admin/login = authc

  /admin/logout = logout

  /static/ = anon

  /admin/ = authc

  主要内容是shiroFilter的定义。

  loginUrl:登陆页面,用户登陆不成功,自动返回此页面。

  successUrl:登陆成功后跳转此页面

  unauthorizedUrl:用户访问无权限的链接时跳转此页面

  filterChainDefinitions:设置url的访问权限。anon表示不用验证,都可以访问。anthc:authc filter

监听,不登陆不能访问。logout:logout filter监听。没有列出的常用配置:perms["remote:invoke"] :需要角色romote

和权限invoke才能访问。roles["admin"]需要角色admin才能访问。设置可用“,”隔开,如:

  /admin/test = authc,roles[admin]

  关于filter的列表:

  Filter NameClass

  anonorgapacheshirowebfilterauthcAnonymousFilter

  authcorgapacheshirowebfilterauthcFormAuthenticationFilter

  authcBasicorgapacheshirowebfilterauthcBasicHttpAuthenticationFilter

  permsorgapacheshirowebfilterauthzPermissionsAuthorizationFilter

  portorgapacheshirowebfilterauthzPortFilter

  restorgapacheshirowebfilterauthzHttpMethodPermissionFilter

  rolesorgapacheshirowebfilterauthzRolesAuthorizationFilter

  sslorgapacheshirowebfilterauthzSslFilter

  userorgapacheshirowebfilterauthcUserFilter

逗号分割。

推荐一套完整的Shiro Demo,免费的。

Shiro介绍文档:http://wwwsojsoncom/shiro

Demo已经部署到线上,地址是http://shiroitboynet

管理员帐号:admin,密码:sojsoncom 如果密码错误,请用sojson。PS:你可以注册自己的帐号,然后用管理员赋权限给你自己的帐号,但是,每20分钟会把数据初始化一次。建议自己下载源码,让Demo跑起来,然后跑的更快。

日本一尾到九尾9种圣兽

一尾 守鹤 Shuukaku,是一种狸的化身。拥有者为沙暴的我爱罗, 毫无争议,不过一尾被剥离后的去向目前不得而知,究竟是归冥王所有还是封印到某个晓成员身上呢

二尾 猫又 Nekomata,是一种猫妖,拥有死亡的力量。 二尾的力量极为强大,据称是死神的宠物,估计归尚未露面的晓成员白虎拥有,毕竟猫虎都是猫科动物^^

三尾 矶抚 Isonade, 外形似一种大鱼的妖怪。干柿鬼鲛长得就是一张鲨鱼脸,这种鱼妖非他莫属。如果不是为了这种对应,作者会心血来潮的创造这个形象和其他人完全不着边的鱼人么?所以那些觉得鬼蛟有尾兽的人不用乱猜拉~据称日本神话里矶抚有一个跟班,叫做蛟肌,负责帮助矶抚消化吸收食物转划成力量难道说鬼蛟的刀是活的查克拉吸收怪物~ 值得一提的是在日本神话里,英雄就是毁掉了蛟肌这条跟班鱼才使矶抚无法吸收能量,从而被干掉的~难道鬼蛟也不阿,本人喜欢鬼蛟,比较另类把^^

四尾 鼠蛟 Sokou,日本神话中的一种蜥蜴状的妖怪,是鸡和蛇的混合体,他们也是一对夫妻。因为四尾永远是趴在地上以蛇形的方式蹭着行走的,所以应该对应的是蝎大人吧。

五尾 彭侯 Houkou, 长相像一种狗的妖怪,生活在一棵古树里,在五条尾巴里分别拥有着五种元素的力量。传说中9尾神兽里仅次于九尾和八尾的超强神兽,元素攻击极强~既然是狗,最可能的对应对象应该是牙(我汗牙也有么),要不然绝也很可能,绝就像生活在树里一样~有人说是猪笼草,无所谓~大家都是植物争什么争

六尾 雷兽 Raijuu, 像一种鼬鼠,有四条腿和锋利的爪。从名字上我们都可以推断谁是其对应人物。这种鼬鼠擅长喷火术和雷击术,估计是使用者为鼬(火)或者卡卡西一族(雷)

七尾 貉 Kaku,应该是一种獾,但是我刚才已经说我爱罗对应狸了,所以这次……汗。七尾是一种很能变化成各种动物的獾类,类似日本神话里狸猫变化的东西吧~值得一提的是七尾从来都是在一个地下粘土洞里居住,以粘土掩饰自己颜色而变化~最后被传奇武士Ikkyu Sojun 将粘土洞烧焦,在没有粘土可用的情况下,七尾被杀~估计为晓组织青龙的达拉迪所拥有,否则他干吗用粘土。七尾有5张嘴的特性也在他身上,虽说现在只看到左手和头上两只嘴,谁知道没准他P股后面没有啊~此兽也可能为晓玄武的岩忍所拥有

八尾 八俣大蛇 Hachimata, 在日本神话中能够和九尾相提并论的妖怪大概就只有同样是S级妖怪的八俣大蛇了,《古事记》中记载:大蛇双目赤红如酸酱,身长有八头八尾,还有众多树木藤蔓并生。况且,3神器之一的草雉剑就在八尾体内,想想大蛇打三代的时候,不用说,毫无疑问的八尾拥有者

九尾 九尾狐 Kyuubi Kitsune,不用多说了。 要不是鸣人我现在就去撞墙

一尾 守鹤

日本神话原型----一种狸猫,体色**

能力-----风沙,拥有控制强风和沙尘的能力

尾兽力量排名:8

尾兽查克拉量排名:9

象征代号: 风

原居住/被发现地:奈良沙漠

二尾 猫又

日本神话原型----- 一种两条尾巴的黑猫,耳朵大而尖,牙齿为双面锯齿型

能力----死亡,可以控制死人的灵魂(会不会和我爱罗有关)以及异界冥兽(这个没看懂)

尾兽力量排名:4

尾兽查克拉量排名:8

象征代号: 暗

原居住/被发现地: 北海道鬼之森

三尾 矶怃(终于轮到我们家鬼鲛了!!)

日本神话原型----3尾鳍的大鲨鱼,体色为深蓝色,嗜血,有跟班小鱼一只,名为蛟机(就是我们家鬼鲛的刀名),负责帮助矶怃吸收并消化部分查克拉

能力---水,可以控制水流,鱼类

尾兽力量排名:6

尾兽查克拉量排名:7

象征代号: 水

原居住/被发现地:四国岛 南斗-和川 海域(南斗!!我没听错把)

四尾 鼠蛟

日本神话原型---4尾的鸡/蛇混合物,下半身蛇,上半身鸡,在地上匍匐行走(像沙漠之蝎那样),主要为橙色,生活在山谷里

能力---可以控制毒物,毒气,毒液等

尾兽力量排名:9

尾兽查克拉量排名:6

象征代号:毒

原居住/被发现地: 东京都 富士山西町

五尾 彭侯

日本神话原型---5条尾巴的狗类,为白色,五条尾巴分别拥有风雷水火土五种元素力量,一起使用的时候会造成大地震

能力:混合元素攻击,精通各种元素能力,瞬间制造各种自然灾害

尾兽力量排名:3

尾兽查克拉量排名:5

象征代号: 幻

原居住/被发现地: 九州岛 赤濑岩火山

六尾 雷兽

日本神话原型---一种獾类,为金**,浑身长毛倒竖,6只尾巴以闪电的形状出现,为日本古代雷神

能力:天火 雷电 雷元素法术

尾兽力量排名:5

尾兽查克拉量排名:4

象征代号: 雷

原居住/被发现地: 京都左三目町 雷之神社地下

七尾 貉

日本神话原型:体形最小的尾兽(只是相对阿,比一般东西还是大很多),蓝色,依K在地上掘洞居住,再有粘土的地方可以变化成各种其他动物及隐形,善于利用粘土伪装,很难碰到

能力: 变身,粘土,土元素法术

尾兽力量排名:7

尾兽查克啦量排名:3

象征代号:土

原居住/被发现地: 名古屋郊野 地下祭坛

八尾 八娱大蛇

日本神话原型:八头八尾的超级大蛇,体形为尾兽中最大,深褐色,原本力量在彭侯和猫又之下,然数千年前一勇士试图利用神器草稚剑击杀大蛇,神剑力量反而被大蛇吸收,能力大增,可自由运用体内草稚剑的力量的怪物

能力:神器 草稚剑, 召唤魔族

尾兽力量排名:2

尾兽查克拉量排名:2

象征代号:魔

原居住/被发现地: 大阪 黄泉乡古战场

九尾 九尾狐

日本神话原型:日本神话里最强的S级妖兽,为赤红色,代表火之力量,其能力巨大,由于是唯一一只从来没有被打败过得妖兽,其潜在力量无法估计,攻击方式为使用其接近无限的查克拉转动9条尾巴(什么意思,电风扇?),任何K近的生物都会被9条尾巴所产生的强大风力吸过去,然后再被妖狐可变大的巨爪撕碎。同时浑身毛发可放出无限次火元素类似陨石的攻击,可以瞬间毁灭城市。上古神兽战中,将挑战得彭侯打成重伤,猫又如不是被其主人死神救走,几乎丧命,而八娱大蛇则依K草雉剑勉强全身而退,草稚剑也被打裂一个小缺口

能力:火元素攻击 妖狐火之爪

尾兽力量排名:1

尾兽查克拉量排名:1

象征代号: 火从强到弱:

九尾 九尾狐 Kyuubi Kitsune

八尾 八俣大蛇 Hachimata

五尾 彭侯 Houkou

二尾 猫又 Nekomata

六尾 雷兽 Raijuu

三尾 矶抚 Isonade

七尾 貉 Kaku

一尾 守鹤 Shuukaku

四尾 鼠蛟 Sokou

神话传说,下场和九大神兽战介绍

一尾 守鹤

神话传说:生长在奈良沙漠,受异界魔力影响,被风沙掩埋堆积而产生的狸猫怪物,以在沙漠中被风沙困死的死者怨灵而生,本体为一只狸猫,生性爱玩,喜欢用风沙掩埋自己眼前所有的东西。身上文身为紫罗兰色,文身的意思代表风神的图案。

上古9神兽战情况:参战5场,1胜3负1逃

胜:鼠蛟

负:雷兽

猫又

矶怃

逃:八娱大蛇

下场:被奈良和尚Oraga Nakashimu先以法术把守鹤瞬间变小,然后用 “法器 鹿角盅“ (不知道什么东西,翻译不出来,应该是一种特制的大锅)封印在风之祭坛

二尾 猫又

居住在日本极北的北海道死之森,黑色猫妖,有巨大黑天使翅膀,原为死神的宠物,后私自越过三界之门逃到人间界,以吸食死人灵魂为乐,当灵魂不够时就杀人然后取得死人怨灵,可以随意召唤死者的灵魂为自己战斗,并且从冥界召唤异界魔物。脑顶的第三只眼一旦张开死人的灵魂就会被其吞噬

上古9神兽战: 自恃甚高,自以为天下无敌,与彭侯结盟进攻九尾狐,惨败,最后一刻被死神救走,幸免于难

参战4场 3胜一败

胜:貉

玑怃

守鹤

负:九尾狐

下场:在九尾狐杀死其的一霎那灵魂被死神以异界召唤的形势救走,本体则被留在死之森的神社内,以死神封印所封住

三尾 矶怃

前额有勾状角突起的鲨鱼怪物,常年生活在 日本西部的四国岛 南斗-和川海域,住在日本海深处的须贺海沟底,每隔数月就会浮上海面透气,当矶怃浮上海面时,雷电交加,暴风雨大作,海上波涛汹涌,在日本海上的一切船只都会被其吞没作为食物。玑怃手下的一条跟班鱼,名为鲛机,平时贴在矶怃肚子上,负责清理残余物,并且从矶怃肚子里吸取食物,提炼大量查克拉,然后把查克拉送回矶怃体内。鲛机的力量在于其可以从食物里提取正常可提取查克拉5倍的查克拉,储存在鲛机体内的查克拉会在矶怃战斗的时候源源不断,送入矶怃体内

上古神兽战: 参战 4 场 2胜1负1逃

胜:貉

守鹤

负: 猫又

逃:八娱大蛇

下场: 横滨的渔民勇士 takuma muramasa 以牺牲2名村内勇士的情况下冒死K近矶怃,将跟班鱼 鲛机 封印在取自水之祭坛的 “法器 鲨鳉壶“ 矶怃无法提取大量查克拉,精力耗尽时也被封印进去,鲨鳉壶则被封印在水之祭坛

四尾 鼠鲛

常年居住在富士山火山里,受火山灰和火山化学反应的毒气影响,由鸡怪 灵鬼 和蛇怪 茂鬼 合体而成, 鼠蛟所在的地方周围100里生气全无,草木枯萎,毒气蔓延,属于剧毒之物,每隔几年鼠蛟在富士山冬眠的时候, 鼾声所引起的剧毒气体会造成富士山火山爆发

上古神兽战:参战 4场, 3负1逃

负:守鹤

彭侯

逃: 雷兽

下场: 被日本幕府第一妖术师 yamazaki ishiro 以 “法器 网月笼“ 封印在富士山底部,永远无法把毒气散发出山口以外~

五尾 彭侯

吸收 风雷水火土五个祭坛各自的部分力量而生的犬类怪物,五条尾巴可以放出五种元素的强力攻击,以破坏大自然而夺取大自然的元素力量精华为乐,在富士山顶击败鼠蛟后不可一世,在古战场击败强敌猫又后与猫又联手进攻九尾,然而九尾狐的查克拉量为无限,猫又,彭侯支持不住,彭侯虽然侥幸以风遁逃脱,然而重伤

上古神兽战: 参战 4场 3 胜一负

胜: 鼠蛟

猫又

雷兽

负: 九尾狐

下场:重伤后逃离日本岛,躲到九州岛的火山附近一棵树里疗伤,无人知道此树的具体位置

六尾 雷兽

雷之祭坛从上古就开始供奉的雷神,受到八娱大蛇的邪恶力量所影响成为妖物,嗜血,六条闪电状尾巴可以放出无限伏的电压。喜爱在黑夜里释放强力雷电,天火,烧毁所有周围的东西

上古神兽战 :5 场, 2 胜 3负

胜:守鹤

鼠蛟

负:彭侯

八娱大蛇

九尾狐

下场: 被名忍者 sarutobi(就是猿飞) ryoka 以 “禁术 雷切“(日文上就是写的这俩汉字,不知道是不是卡卡西的雷切)把雷兽的雷切断,从而力量反逆回去,雷兽自己受到自己攻击,重伤,被sarutobi-sama以 “法器 隐雷圈“ 封印在雷之祭坛

七尾 貉

最为狡猾的尾兽,体形不大(我晕,这里注释写身高17米,这还不大),善于伪装,很少在地面上露面,一般都在地下掘洞而行,喜欢伪装到猎物脚下,然后把猎物脚下的土破坏,从而使猎物直接掉进它的肚子。喜欢袭击商旅,每次上到地面上就会变身成各个形状,大小,样子,无法区分,在没有粘土的地方无法变身,一旦遇到危险就变颜色逃跑

上古神兽战: 4场 1胜3逃

胜:鼠蛟

逃:猫又

矶怃

八娱大蛇

下场: 被勇士 ikkyo sojun 把其藏身的粘土洞烧焦,貉无法变化,被勇士们以 “法器 土零坛“ 封印在土之祭坛

八尾 八娱大蛇

日本恒古以来最强的S级魔物,八头八尾的巨大蛇类,拥有魔界的力量,黑暗力量的起源,邪恶的代表八个头分别代表 "魂 鬼 恶 妖 魔 屠 灵 死" 其本身的黑暗实力本来不如五尾彭侯的元素力量和二尾猫又的死亡力量,但是草稚家族的后人莽撞行事,动用本家族神器 草稚剑 强行击杀大蛇,结果大蛇把所有的黑暗力量凝聚在脖子上,使神器的剑锋也不能完全砍断,而大蛇尾兽的惊人回复力将草稚剑吸收入体内,化为自己的一股超强力量,能力一鼓超过猫又,彭侯两大强敌,之后,自大的大蛇自以为九尾并非他的对手,于是八娱大蛇有了可以控制三界的邪恶力量,它为了一统三界,散发强大的邪恶力量,揭开风 雷 水 火 土五个祭坛的封印,放出沙之守鹤,雷之雷兽,火之九尾狐, 水之矶怃, 土之貉5只神兽危害人界,邪恶的气息还惊醒了鼠蛟 猫又 彭侯 三只远住在关西的怪物,然而,8只怪物不肯听从八娱大蛇,引发了长达522年的上古九大神兽战,而大蛇虽然以其超强的魔力打败众多魔兽,却低估了9大神兽之首的九尾狐的实

力,在消耗战中败北,赖以自豪的"神器 草稚剑"也被打开一个小缺口,可以说是完败,于是,八娱大蛇自我封印到草稚家族的世代仇敌"八神"一族的灵魂里,希望总有一天八神一族的天才后代能够重新唤醒自己的力量再与九尾狐决一胜负

上古神兽战: 参加5场 4胜1负

胜: 守鹤

矶怃

雷兽

负: 9尾狐

下场:据传在八娱大蛇的力量在八神一族中传承,如果后裔中出现千年一次的天才,八娱大蛇的能力就可以在此后人面临生死关头的时候被解放出来,是毁灭一切的力量,八娱大蛇的真身一旦复出,在没有找到九尾狐决战之前,会杀死任何所看到的人,物,甚至神兽 手动解放八尾力量的方法则是一种秘传解封印术,一旦八神一族的后人能够领会,就可以在任何时候解放八尾的强大力量

九尾 九尾狐

九尾狐是九大神兽最强的一个,其强大主要体现在查克拉上面,与别的尾兽提取查克拉的方式不同(一尾,七尾,四尾,六尾靠食人制作查克拉,二尾,八尾利用异界力量,三尾利用跟班鱼鲛机,五尾吸收大自然精华),九尾不用借助外力制作查克拉,九尾体内的火神封印可以自动制作查克拉,使九尾的查克拉永远是无限,持久作战能力强。与八尾的大战中,虽然八尾与九尾的实力相差无几,但是在100多年的持久作战中,八尾的查克拉后续不上,而被九尾击败。九尾的九条尾巴拥有巨大的能量,一起转动可以引起飓风,配合浑身毛发可以像天空发射查克拉形成陨石雨的法术,再9大神兽战中屡屡击败强敌,较弱的尾兽如鼠蛟,守鹤等,根本不敢前来古战场。火之祭坛为五大祭坛之首,据传除了火之封印的查克拉产生器外尚有2种特有绝技。遭受八娱大蛇的黑暗波动影响后,九尾被从火之祭坛唤醒,九尾是最有人类智慧的灵兽,与八娱大蛇一样,并不像诸如守鹤,彭侯之类纯以杀戮为目标,九尾希望找出唤醒自己的魔物,并且找到并杀死上次封印自己的忍者们, 然而,八娱大蛇直到被击败都没有说出自己就是唤醒九尾的怪物

上古神兽战:4战 全胜

胜:猫又

彭侯

雷兽

八娱大蛇

下场:行踪不明,再没有被再次封印之前,九尾的目标就是找到八娱大蛇,或者杀死所有忍者直到找到封印他的忍者为止(然后,就被我们的四代给)

原居住/被发现地: 神户 月山五町目 神之坛