Как создать собственное выражение веб-безопасности для использования в JSP? - PullRequest
0 голосов
/ 17 сентября 2018

Как можно создать собственное выражение веб-безопасности, чтобы я мог использовать его в файле JSP, например:

<sec:authorize access="isOwner()"> some content here </sec:authorize>

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018

Я предлагаю вам использовать Shiro framework.
Официальная ссылка: http://shiro.apache.org/
Реализуйте AuthorizingRealm с помощью extends, затем добавьте выражение управления безопасностью в doGetAuthorizationInfo(...).
В JSP сначала добавьте библиотеку тегов Shiro JSP, официальную ссылку: http://shiro.apache.org/web.html#Web-taglibrary

Использование <shiro:hasPermission name="...">...</shiro:hasPermission> может контролировать то, что вам нужно. name свойство - это выражение, которое будет сравниваться с тем, что вы установили в AuthorizingRealm.

Вот руководство по выражению разрешений: http://shiro.apache.org/permissions.html

Вот несколько примеров использования:

<%@ taglib prefix="shiro" uri=http://shiro.apache.org/tags %>
<html>
<body>
    <shiro:hasPermission name="users:manage">
        <a href="manageUsers.jsp">
            Click here to manage users
        </a>
    </shiro:hasPermission>
    <shiro:lacksPermission name="users:manage">
        No user management for you!
    </shiro:lacksPermission>
</body>
</html>
0 голосов
/ 17 сентября 2018

Вот что вам нужно.Чтобы создать собственное выражение SpEL, выполните следующие действия:

1) Создайте собственный подкласс класса WebSecurityExpressionRoot .В этом подклассе создайте новый метод, который вы будете использовать в выражении.Например:

public class CustomWebSecurityExpressionRoot extends WebSecurityExpressionRoot {

    public CustomWebSecurityExpressionRoot(Authentication a, FilterInvocation fi) {
        super(a, fi);
    }

    public boolean yourCustomMethod() {
        boolean calculatedValue = ...;

        return calculatedValue;

    }
}

2) Создать пользовательский подкласс DefaultWebSecurityExpressionHandler метод класса и переопределения createSecurityExpressionRoot (аутентификация аутентификации, FilterInvocation fi) (не createEvaluationContext (...)) в нем, чтобы вернуть ваш CustomWebSecurityExpressionRoot экземпляр.Например:

@Component(value="customExpressionHandler")
public class CustomWebSecurityExpressionHandler extends DefaultWebSecurityExpressionHandler {

    @Override
    protected SecurityExpressionRoot createSecurityExpressionRoot(
            Authentication authentication, FilterInvocation fi) {

        WebSecurityExpressionRoot expressionRoot = new CustomWebSecurityExpressionRoot(authentication, fi);

        return expressionRoot;
}}

3) Определите в вашем spring-security.xml ссылку на ваш компонент обработчика выражений

<security:http access-denied-page="/error403.jsp" use-expressions="true" auto-config="false">
    ...

    <security:expression-handler ref="customExpressionHandler"/>
</security:http>

После этого вы можете использовать собственное пользовательское выражение вместостандартный:

<security:authorize access="yourCustomMethod()">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...