스프링 mvc 3.2.3 및 스프링 보안 3.1.3을 사용하여 일반 컨트롤러를 만들려고합니다. 내가 뭘 달성하기 위해 노력하고있어이 같은 것입니다 :스프링 보안이 적용된 스프링 MVC 컨트롤러 상속
public abstract class DataController<E extends PersistentEntity> {
protected abstract E getEntity(String id);
@RequestMapping(value="/view/{id}", method=RequestMethod.GET)
public String view(@PathVariable("id") String id, ModelMap map) {
E ent = getEntity(id);
map.put("entity", entity);
return "showEntity";
}
}
내가 컨트롤러 이름을 사용하여 URL을 액세스 할 수 있도록 내 확장 클래스는 클래스 이름의 특정 컨트롤러에 매핑이있을 것이다 :
@Controller
@RequestMapping("/company**")
@Secured("ROLE_ADMIN")
public class CompaniesController extends DataController<Company> {
@Autowired
private AppService appService;
@Override
protected Company getEntity(String id) {
return appService.getCompany(id);
}
}
을
내 문제는 url/company/view가 ROLE_ADMIN에 의해 보호되지 않으며 @Secured가 사용되는 컨트롤러에서/view가 정의되지 않았기 때문에 누구나 액세스 할 수 있다는 것입니다. 보안이 제대로 작동이 경우
. . .
@Override
@RequestMapping(value = "/view/{id}", method = RequestMethod.GET)
public String view(String id, ModelMap map) {
return super.view(id, map);
}
. . .
,하지만 난 다른 방법이 있는지 알고 싶어 :
이
그냥보기 방법을 무시하고 내 회사 클래스의 매핑을 정의하여 해결할 수 있습니다. 내 추상 클래스에 많은 메소드가 있기 때문에,이 메소드는 문제를 일으키고 모든 메소드를 재정의하여 슈퍼를 호출한다.이 문제를 해결할 방법이 있습니까?
덕분에 모든 도움 :
다른 역할 권한을 가진 여러 가지 방법이 있다면 어떻게됩니까? 여기에 컨트롤러 액세스 권한이 있습니다. 메서드 수준에서 사용 권한이 있어야합니다. – singe3
비슷한 주석을 메서드 수준에 넣을 수 있어야합니다. 다른 방법에 대해 서로 다른 소스를 정의해야 할 수도 있습니다. 위에서 나는 getRoles() 메소드를 가지고있다. 'getRolesFunction1()','getRolesFunction2()'등의 메소드가 필요하다. 당신의 메소드에'@PreAuthorize ("hasAnyRole (this.rolesFunction1)")'등으로 주석을 달아라. –