Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
tutorial:dev:override_filter [2018/07/12 11:25] tomiskar |
tutorial:dev:override_filter [2019/03/01 10:37] kotisovam edits |
||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ====== Module - Overriding a filter in a custom module ====== | ||
+ | A [[devel: | ||
+ | |||
+ | The aim of this tutorial is to show how to override some actual filter behavior. We chosen **filter on identity' | ||
+ | |||
+ | Source codes for this tutorial can be found in the [[https:// | ||
+ | |||
+ | ===== What you need before you start ===== | ||
+ | |||
+ | * You need to install CzechIdM 7.5.0 (and higher). We have CzechIdM installed for this tutorial on server '' | ||
+ | * Create identity to call tests with '' | ||
+ | * Create test identity with username '' | ||
+ | |||
+ | ===== 01 Test search identity by username ===== | ||
+ | |||
+ | At start, we will search identity by username - this way you can see how the core filter works. Only the core filter is implemented now, and as a result this command: | ||
+ | |||
+ | $curl -u admin:admin http:// | ||
+ | |||
+ | returns our prepared test identity, whereas the command | ||
+ | |||
+ | $curl -u admin:admin http:// | ||
+ | |||
+ | returns nothing (unless we have previously created an identity with the username '' | ||
+ | |||
+ | ===== 02 Filter implementation ===== | ||
+ | |||
+ | We are going to create a new filter in our module which searches all identities by username, which contains a given parameter value (like). | ||
+ | |||
+ | <code java> | ||
+ | @Component(" | ||
+ | @Description(" | ||
+ | public class UsernameIdentityFilter extends AbstractFilterBuilder< | ||
+ | |||
+ | @Autowired | ||
+ | public UsernameIdentityFilter(IdmIdentityRepository repository) { | ||
+ | super(repository); | ||
+ | } | ||
+ | |||
+ | @Override | ||
+ | public String getName() { | ||
+ | return IdmIdentityFilter.PARAMETER_USERNAME; | ||
+ | } | ||
+ | |||
+ | @Override | ||
+ | public Predicate getPredicate(Root< | ||
+ | if (filter.getUsername() == null) { | ||
+ | return null; | ||
+ | } | ||
+ | return builder.like(builder.lower(root.get(IdmIdentity_.username)), | ||
+ | } | ||
+ | |||
+ | @Override | ||
+ | public int getOrder() { | ||
+ | // 0 => default, we don't want to override filter as default, but is possible when order is less than 0. | ||
+ | return 10; | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | The new filter is registered to search for identities (see FilterBuilder template), when parameter '' | ||
+ | |||
+ | ===== 03 Configure filter usage ===== | ||
+ | |||
+ | We added new filter with order '' | ||
+ | |||
+ | Go to the application configuration page (or to application.property file) and set the property value: | ||
+ | |||
+ | <code properties> | ||
+ | idm.sec.core.filter.IdmIdentity.username.impl=exampleUsernameIdentityFilter | ||
+ | </ | ||
+ | |||
+ | <note important> | ||
+ | |||
+ | Read more about [[devel: | ||
+ | |||
+ | ===== 04 Test search identity by username ===== | ||
+ | |||
+ | Now, execute test commands again: | ||
+ | $curl -u admin:admin http:// | ||
+ | $curl -u admin:admin http:// | ||
+ | | ||
+ | <note tip> | ||
+ | |||
+ | ===== 05 Create test for filter ===== | ||
+ | |||
+ | <code java> | ||
+ | |||
+ | @Transactional | ||
+ | public class UsernameIdentityFilterTest extends AbstractIntegrationTest { | ||
+ | |||
+ | @Autowired | ||
+ | private UsernameIdentityFilter usernameIdentityFilter; | ||
+ | |||
+ | @Test | ||
+ | public void testFilteringFound() { | ||
+ | String username = getHelper().createName(); | ||
+ | IdmIdentityDto identityOne = getHelper().createIdentity(username); | ||
+ | IdmIdentityDto identityTwo = getHelper().createIdentity(getHelper().createName() + username + getHelper().createName()); | ||
+ | IdmIdentityDto identityThree = getHelper().createIdentity(getHelper().createName() + username + getHelper().createName()); | ||
+ | |||
+ | IdmIdentityFilter filter = new IdmIdentityFilter(); | ||
+ | filter.setUsername(username); | ||
+ | List< | ||
+ | |||
+ | assertEquals(3, | ||
+ | |||
+ | IdmIdentity identity = identities.stream().filter(ident -> ident.getId().equals(identityOne.getId())).findFirst().get(); | ||
+ | assertNotNull(identity); | ||
+ | |||
+ | identity = identities.stream().filter(ident -> ident.getId().equals(identityTwo.getId())).findFirst().get(); | ||
+ | assertNotNull(identity); | ||
+ | |||
+ | identity = identities.stream().filter(ident -> ident.getId().equals(identityThree.getId())).findFirst().get(); | ||
+ | assertNotNull(identity); | ||
+ | } | ||
+ | |||
+ | @Test | ||
+ | public void testFilteringNotFound() { | ||
+ | String username = " | ||
+ | getHelper().createIdentity(username); | ||
+ | getHelper().createIdentity(" | ||
+ | getHelper().createIdentity(getHelper().createName() + username + getHelper().createName()); | ||
+ | |||
+ | IdmIdentityFilter filter = new IdmIdentityFilter(); | ||
+ | filter.setUsername(" | ||
+ | List< | ||
+ | |||
+ | assertEquals(0, | ||
+ | } | ||
+ | } | ||
+ | </ |