我试图在broadleaf e-commerce
管理员那边创建自定义页面。我遵循了这个tutorial。但是,当我尝试访问页面时,出现此奇怪错误。 。这是我的控制器的代码:
package com.community.admin.controller;
import org.broadleafcommerce.openadmin.web.controller.AdminAbstractController;
import org.springframework.security.access.annotation.Secured;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Controller
@RequestMapping("/" + ThemeController.SECTION_KEY)
@Secured("PERMISSION_OTHER_DEFAULT")
public class ThemeController extends AdminAbstractController {
protected static final String SECTION_KEY = "test";
@RequestMapping(value = "", method = RequestMethod.GET)
public String test(HttpServletRequest request, HttpServletResponse response, Model model) throws Exception {
// This is expected by the modules/emptyContainer template, this is a custom template that gets included into the body
model.addAttribute("customView", "views/test");
// ensure navigation gets set up correctly
setModelAttributes(model, SECTION_KEY);
// gets the scaffolding set up to display the template from the customView attribute above
return "modules/emptyContainer";
}
}
由于本教程中没有提到Web-INF文件夹,因此我将HTML文件添加到存在其他HTML页面的Resources > open_admin_styles > templates > views
文件夹中。任何帮助将不胜感激
P.S:我得到了AccessDeniedException
。我对权限进行了以下查询:
INSERT INTO `blc_admin_module` (`ADMIN_MODULE_ID`, `DISPLAY_ORDER`, `ICON`, `MODULE_KEY`, `NAME`) VALUES (1, 7, 'icon-barcode', 'MyCustomModule', 'My Custom Module');
INSERT INTO `blc_admin_section` (`ADMIN_SECTION_ID`, `DISPLAY_ORDER`, `NAME`, `SECTION_KEY`, `URL`, `ADMIN_MODULE_ID`) VALUES (1, 1000, 'My Custom Section', 'MyCustomSection', '/test', 1);
INSERT INTO `blc_admin_sec_perm_xref` (`ADMIN_SECTION_ID`, `ADMIN_PERMISSION_ID`) VALUES (1, -1);
编辑
删除“安全注释”可以解决该问题,无论我是否按照文档中所述在db中添加了所有权限。
答案 0 :(得分:0)
Spring Framework Security使用“ ROLE_”前缀,因此您不能使用@Secured("PERMISSION_OTHER_DEFAULT")
,因为RoleVoter不会对其进行处理。
您必须更改所有Broadleaf权限名称,添加“ ROLE_”前缀以使其起作用。
在这种情况下,您必须将数据库中的“ PERMISSION_OTHER_DEFAULT”更改为“ ROLE_PERMISSION_OTHER_DEFAULT”,并在控制器中将其用作:
@Controller
@RequestMapping("/" + ThemeController.SECTION_KEY)
@Secured("ROLE_PERMISSION_OTHER_DEFAULT")
public class ThemeController extends AdminAbstractController {
//something
}
使用其他权限执行相同操作。
答案 1 :(得分:0)
以上答案解决了安全问题。但是我在 6.1.5-GA 版本的 admin 中也没有找到 Web-INF
文件夹和 Resources > open_admin_styles > templates > views
文件夹。
然后我将 test.html 文件添加到
<块引用>admin > src > main > resources > community-demo-style.templates.admin
文件夹。
而且在 MyController
类中将 /test.html 提供给 model.addAtrribute()
就像 model.addAttribute("customView", "/test.html");
它对我来说很好。