
org.wicketstuff.security.checks.SecurityChecks Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of wicketstuff-security-wasp Show documentation
Show all versions of wicketstuff-security-wasp Show documentation
Wicket Abstract Security Platform
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.wicketstuff.security.checks;
import org.wicketstuff.security.actions.WaspAction;
/**
* Class for general security checks that combines security checks to work together. Note that
* besides this way of chaining it is also possible wrap checks like this:
*
*
*
* public class MySecurityCheck extends AbstractSecurityCheck
* {
* private ISecurityCheck wrapped;
*
* public MySecurityCheck(ISecurityCheck wrapped)
* {
* this.wrapped = wrapped;
* }
*
* public boolean isActionAuthorized(WaspAction action)
* {
* return myOwnStuff() && wrapped.isActionAuthorized(action);
* }
*
* public boolean isAuthenticated()
* {
* return myOwnStuff() && wrapped.isAuthenticated();
* }
* }
*
*
*
* @author dashorst
*/
public class SecurityChecks
{
/**
* Combines the checks in an and list of checks. This means: check1 and check2
* and check3 and ...
*
* @param checks
* the checks to combine into a single and check
* @return a security check that combines the checks in a single and
*/
public static ISecurityCheck and(ISecurityCheck[] checks)
{
return new AndSecurityCheck(checks);
}
/**
* Combines the checks in an and list of checks. This means: check1 and check2.
*
* @param check1
* the first of 2 checks to combine into a single and check
* @param check2
* the second of 2 checks to combine into a single and check
* @return a security check that combines the checks in a single and
*/
public static ISecurityCheck and(ISecurityCheck check1, ISecurityCheck check2)
{
return new AndSecurityCheck(new ISecurityCheck[] { check1, check2 });
}
/**
* Combines the checks in an or list of checks. This means: check1 or check2 or
* check3 or ...
*
* @param checks
* the checks to combine into a single or check
* @return a security check that combines the checks in a single or
*/
public static ISecurityCheck or(ISecurityCheck[] checks)
{
return new OrSecurityCheck(checks);
}
/**
* Combines the checks in an or list of checks. This means: check1 or check2.
*
* @param check1
* the first of 2 checks to combine into a single or check
* @param check2
* the second of 2 checks to combine into a single or check
* @return a security check that combines the checks in a single or
*/
public static ISecurityCheck or(ISecurityCheck check1, ISecurityCheck check2)
{
return new OrSecurityCheck(new ISecurityCheck[] { check1, check2 });
}
/**
* SecutiryCheck that provides an *and* security check combining several checks into a single
* and.
*/
private static class AndSecurityCheck extends AbstractSecurityCheck
{
/** For serialization. */
private static final long serialVersionUID = 1L;
private ISecurityCheck[] checks;
private AndSecurityCheck(ISecurityCheck[] checks)
{
this.checks = checks;
if (checks == null)
this.checks = new ISecurityCheck[0];
}
/**
* Tests each {@link ISecurityCheck} sequentially, returning false as soon as one fails.
* Note that if no checks are present it will return true.
*
* @see org.wicketstuff.security.checks.ISecurityCheck#isActionAuthorized(org.wicketstuff.security.actions.WaspAction)
*/
public boolean isActionAuthorized(WaspAction action)
{
ISecurityCheck check;
for (int i = 0; i < checks.length; i++)
{
check = checks[i];
if (check == null)
continue;
if (!check.isActionAuthorized(action))
return false;
}
return true;
}
/**
* Tests each {@link ISecurityCheck} sequentially, returning false as soon as one fails.
* Note that if no checks are present it will return true.
*
* @see org.wicketstuff.security.checks.ISecurityCheck#isAuthenticated()
*/
public boolean isAuthenticated()
{
ISecurityCheck check;
for (int i = 0; i < checks.length; i++)
{
check = checks[i];
if (check == null)
continue;
if (!check.isAuthenticated())
return false;
}
return true;
}
}
/**
* SecutiryCheck that provides an or security check combining several checks
* into a single or.
*/
private static class OrSecurityCheck extends AbstractSecurityCheck
{
/** For serialization. */
private static final long serialVersionUID = 1L;
private ISecurityCheck[] checks;
private OrSecurityCheck(ISecurityCheck[] checks)
{
this.checks = checks;
if (checks == null)
this.checks = new ISecurityCheck[0];
}
/**
* Tests each {@link ISecurityCheck} sequentially, returning true as soon as one succeeds.
* Note that if no checks are present it will return true.
*
* @see org.wicketstuff.security.checks.ISecurityCheck#isActionAuthorized(org.wicketstuff.security.actions.WaspAction)
*/
public boolean isActionAuthorized(WaspAction action)
{
if (checks.length == 0)
return true;
boolean containsChecks = false;
ISecurityCheck check;
for (int i = 0; i < checks.length; i++)
{
check = checks[i];
if (check == null)
continue;
containsChecks = true;
if (check.isActionAuthorized(action))
return true;
}
return !containsChecks;
}
/**
* Tests each {@link ISecurityCheck} sequentially, returning true as soon as one succeeds.
* Note that if no checks are present it will return true.
*
* @see org.wicketstuff.security.checks.ISecurityCheck#isAuthenticated()
*/
public boolean isAuthenticated()
{
if (checks.length == 0)
return true;
boolean containsChecks = false;
ISecurityCheck check;
for (int i = 0; i < checks.length; i++)
{
check = checks[i];
if (check == null)
continue;
containsChecks = true;
if (check.isAuthenticated())
return true;
}
return !containsChecks;
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy